这里有一个问题,我们需要用另一个新字符串替换字符串中出现的所有字符。
问题如下:
编写一个程序来替换给定字符的出现(例如c)
在一个主字符串(比如PS)和另一个字符串(比如s)中。
输入:
第一行包含主字符串(PS)
下一行包含字符(c)
下一行包含字符串
输出:
打印字符串PS,每次出现c时都用s替换。
注:
-PS或s中没有空格。
最大PS长度为100。
S的最大长度为10。
以下是我的代码:

#include<stdio.h>
int main()
{
    char ps[100],*ptr,c,s[10];

    printf("Enter any string:");
    gets(ps);

    printf("Enter the character you want to replace:");
    scanf("%c",&c);

    printf("Enter the new string:");
    fflush(stdin);
    scanf("%s",&s);

    ptr=ps;

    while(*ptr!='\0')
    {
        if(*ptr==c)
        *ptr=s;
        ptr++;
    }

    printf("Final string is:");
    puts(ps);
    return 0;
}

我无法用字符串替换字符。它只是给了我一个垃圾输出来代替我想要替换的字符。
但是,当我将其声明为字符时,输出与预期一样。它用另一个字符替换该字符。
你能帮我做这个吗?

最佳答案

中的*ptr=s;

if(*ptr==c)
    *ptr=s;

实际上是将字符数组的基址赋给s指向的内存位置。这不会将字符替换为字符串,但会导致错误。
我同意yano。最好创建一个新的字符数组来存储结果字符串,因为原始数组可能没有足够的空间容纳新字符串。
如果新字符串是ptr,则可以执行以下操作
for(i=j=0; ps[i]!='\0'; ++i)
{
    result[j++]=ps[i];
    if(ps[i]==c)
    {
        for(--j, k=0; s[k]!='\0'; ++k)
        {
            result[j++]=s[k];
        }
    }
}
result[j]=0;

result应该作为数组decays into a pointer到其第一个元素的名称。
最好避免scanf("%s",&s);scanf("%s", s);Sourav Ghosh所述。
gets()fflush(stdin)because you can guarantee you never overflow the input string buffer更安全。
至于fgets()是错的,看看here

10-07 16:21
查看更多