无法用另一个字符串替换字符串中的字符
下面是一个问题,我们需要用另一个新字符串替换字符串中所有字符的出现。 下面给出的是这样一个问题:无法用另一个字符串替换字符串中的字符
编写一个程序,替换给定字符的发生(比如C) 在主字符串(说PS)与另一个字符串(比如S)。
输入: 第一行包含在主串(PS) 下一行包含一个字符(C) 下一行包含一个字符串(或多个)
输出: 打印串PS与每一个发生c被s代替。
NOTE: - 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
到所述存储器位置的基地址由ptr
指向。这不会用字符串替换字符,但会导致错误。
我同意yano。最好创建一个新的字符数组来存储结果字符串,因为原始数组可能没有足够的空间来容纳新字符串。
如果新的字符串是result
,你可以不喜欢
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;
的scanf("%s",&s);
应scanf("%s", s);
作为数组decays into a pointer它的第一个元素的名称。
最好避免gets()
和fflush(stdin)
作为Sourav Ghosh提到。
fgets()
比gets()
because you can guarantee you never overflow the input string buffer更安全。
至于fflush(stdin)
是错的,看看here。
在C中,一个字符串是一个字符序列,由第一个地址表示。因此*ptr = s
应该已经得到了关于编译器中不匹配类型的警告。如果你想插入一个字符串到另一个,你需要移动其他字符,以腾出空间。
,但似乎你的问题的描述并不要求你做一个新的字符串,只是打印仿佛你了。因此,您可以遍历原始字符串,并且对于每个字符,如果要替换它,则打印替换字符串,否则打印原始字符。
'fflush(stdin)'和'gets()'...都是坏的。 –
你看到的'垃圾'可能是一个内存地址... –
我建议将结果字符串写入一个新的'char'数组。 'c'中的数组不会自动调整大小。即使你正确地用字符串's'替换字符'c',如果's'多于一个字符长度,它将覆盖'ps'中的字符,这不是你想要的。你当然可以在阵列中移动角色来为新阵列腾出空间,但这会比编写一个新阵列更困难的编码方式。 – yano