C 用多个字符替换一个字符

C 用多个字符替换一个字符,c,string,char,c-strings,C,String,Char,C Strings,我需要将”(空格)替换为,“(逗号和空格)。 我有一个函数,它接收字符串作为char*,替换所有字符后,在屏幕上打印字符串 char* PrintComma(char* Text) { for (int i = 0; i < strlen(Text); i++) { if (Text[i] == ' ') { Text[i] = ','; } } return Text; } 这个问题似乎是memmove()的完美设置,memmove()是一个

我需要将
(空格)替换为
,“
(逗号和空格)。 我有一个函数,它接收字符串作为char*,替换所有字符后,在屏幕上打印字符串

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

这个问题似乎是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*printcoma(char*Text){
for(int i=0;i
下面是一个工作示例。输入缓冲区必须足够大,以存储替换的字符串,因为需求声明不应创建新字符串

#包括
#包括
#包括
无效打印逗号(字符*文本)
{
char*str=文本;
尺寸c,len=strlen(文本);
对于(C=0;文本[C];文本[C]==‘’?C++:*文本+ +);
对于(大小i=0;i
结果:

Input:Hello world我的名字是
输出:你好,世界,我的名字,是

根据您的要求:

我有一个函数,它以
char*
的形式接收字符串,替换所有这些字符后,在屏幕上打印字符串

char* PrintComma(char* Text) {
  for (int i = 0; i < strlen(Text); i++) {
    if (Text[i] == ' ') {
        Text[i] = ',';
    }
  }
  return Text;
}
我不认为你想用逗号代替空格。相反,我认为您需要遍历字符串并打印所有字符。当遇到空格时,会额外打印一个逗号。这里大致介绍了如何做到这一点:

void PrintComma(char *text)
{
    const size_t len = strlen(text); // don't call on every iteration

    for(size_t i = 0; i < len; i++)
    {
        if(text[i] == ' ')
            putchar(',');

        putchar(text[i]);
    }
}
void打印逗号(字符*文本)
{
const size\u t len=strlen(text);//不要每次迭代都调用
对于(大小i=0;i
您有两个要求:
1) 必须更换空格
2) 不能使用其他字符数组

这导致了这样一种假设,即输入字符*必须为所有新的
分配足够的空间

在这种情况下,这将起作用

char *PrintComma(char *Text) {
  int numberOfSpaces = 0, orignalLength = strlen(Text);
  for (int i = 0; i < strlen(Text); i++) {
    if (Text[i] == ' ')
      numberOfSpaces++;
  }
  for (int i = orignalLength - 1, j = orignalLength + numberOfSpaces - 1; i >= 0; i--) {
    Text[j] = Text[i];
    j--;
    if (Text[i] == ' ') {
      Text[j] = ',';
      j--;
    }
  }
  return Text;
}
char*printcoma(char*Text){
int numberOfSpaces=0,orignalLength=strlen(文本);
for(int i=0;i=0;i--){
文本[j]=文本[i];
j--;
如果(文本[i]=''){
文本[j]=',';
j--;
}
}
返回文本;
}

第1步:计算空格。这是一个足够的打击,还是你需要更多?步骤2:从字符串的结尾向后工作。注意:
Text
指向的缓冲区必须足够大,以容纳较长的结果字符串。请记住,这要求逗号已经存在。这有点违反直觉,因为它需要分配所需的空间。
memmove
不是“针对具有重叠的字符串优化的”,它是标准库中唯一保证能够处理它的函数。抱歉,这是一个错误。不过,我确实想知道为什么要手动复制字符串,而不是像另一个答案那样使用库函数。