用多个字符替换一个字符

问题描述 投票:-2回答:3

我需要将" "(空格)替换为", "(逗号和空格)。我具有接收字符串作为char *的功能,并且替换所有这些字符后,将在屏幕上显示字符串。

char* PrintComma(char* Text) {
  for (int i = 0; i < strlen(Text); i++) {
    if (Text[i] == ' ') {
        Text[i] = ',';
    }
  }
  return Text;
}

此将" "替换为",",但我需要", "。我不允许使用第二个字符串或数组来保存临时数据。我只能使用这一个字符串。

示例:

Input => "Hello world my name is"
Output => "Hello, world, my, name, is"
c string char c-strings
3个回答
0
投票

这是一个可行的例子。输入缓冲区必须足够大以存储替换的字符串,因为要求指出不应创建任何新字符串。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void PrintComma(char* Text)
{
  char* str = Text;
  size_t c, len = strlen(Text);
  for (c = 0; Text[c]; Text[c] == ' ' ? c++ : *Text++);

  for (size_t i = 0; i < len + c; i++)
  {
    if (str[i] == ' ')
    {
        str[i] = ',';
        char last = ' ';
        for(size_t u = i + 1; u < len + c; u++)
        {
            char current = str[u];
            str[u] = last;
            last = current;
        }

        i += 2;
    }
  }
}

int main(void)
{
  char tmp[100] = { 0 };
  const char* TEST = "Hello world my name is";
  memcpy(tmp, TEST, strlen(TEST));

  printf("Input: %s\n", tmp);
  PrintComma(tmp);
  printf("Output: %s\n", tmp);

  return 0;
}

结果:

Input: Hello world my name is
Output: Hello, world, my, name, is

0
投票

此问题似乎是memmove()的理想设置,memmove()是一种库函数,可以在两个字符串之间复制字节,但可以处理重叠的内存块。

memmove(
    char_pointer + make_room_at + room_to_make,
    char_pointer + make_room_at,
    init_size - make_room_at + room_to_make
);

这里是使用memmove()的应用程序。

char* PrintComma(char* Text) {
  for (int i = 0; i < strlen(Text); i++) {
    if (Text[i] == ' ') {
      memmove(
          Text + i + 1,
          Text + i,
          strlen(Text) - i + 1
      );
      Text[i++] = ',';
    }
  }
  return Text;
}

-2
投票

这应该是我猜到的把戏。

char *PrintComma(char *Text) {
  int numberOfSpaces = 0;
  char *requiredString;
  for (int i = 0; i < strlen(Text); i++) {
    if (Text[i] == ' ')
      numberOfSpaces++;
  }
  requiredString =
      (char *)malloc(sizeof(char) * (numberOfSpaces + strlen(Text)));
  for (int i = 0, j = 0; i < strlen(Text); i++) {
    if (Text[i] == ' ') {
      requiredString[j] = ',';
      j++;
    }
    requiredString[j] = Text[i];
    j++;
  }
  return requiredString;
}
© www.soinside.com 2019 - 2024. All rights reserved.