void replaceLetters(char *text, char original, char new_char) 应该改变文本

void replaceLetters(char *text, char original, char new_char) should change text

我已经尝试解决这个问题好几个小时了。

void replaceLetters(char *text, char original, char new_char) 
{
  text = "Randoi";
  for(int i = 0; i != '[=11=]'; i++){
  if(text[i] == original){
  text[i] = new_char;
  }
}

如果我在这个函数中打印出文本,它是正确的,但在另一个调用这个函数的函数中,文本没有改变,我知道我的指针有问题。

请指点一下。坦克很多。

你的函数定义没有意义,至少因为你覆盖了第一个参数

text = "Randoi";

用字符串文字的地址和for循环中的条件

for(int i = 0; i != '[=11=]'; i++){

不正确。那就是 for 循环永远不会进行迭代。

您不应使用 int 类型作为索引,函数应 return 结果字符串。

函数可以通过以下方式声明和定义

char * replaceLetters(char *text, char original, char new_char) 
{
    for ( char *p = text; *p; ++p )
    {
        if ( *p == original ) *p = new_char;
    }

    return text;
}

注意不能使用函数改变字符串字面量。任何更改字符串文字的尝试都会导致未定义的行为。

这是一个演示程序。

#include <stdio.h>

char * replaceLetters(char *text, char original, char new_char) 
{
    for ( char *p = text; *p; ++p )
    {
        if ( *p == original ) *p = new_char;
    }

    return text;
}

int main(void) 
{
    char s[] = "character";
    
    puts( s );
    puts( replaceLetters( s, 'a', 'A' ) );

    return 0;
}

程序输出为

character
chArActer

请看我的代码。

#include <stdio.h>
void replaceLetters(char *text, char original, char new_char) 
{
  for(int i = 0; text[i] != '[=10=]'; i++)
  {
      if(text[i] == original)
      {
        text[i] = new_char;
      }
    }
}

int main()
{
    char text[] = "Randoi";
    replaceLetters(text,'n','T');
    printf(text);

    return 0;
}

for循环的条件是"for(int i = 0; text[i] != '\0'; i++)"