繁体   English   中英

无法用另一个字符串替换字符串中的字符

[英]Not able to replace a character in a string with another string

这是一个问题,我们需要用另一个新字符串替换一个字符串中所有出现的字符。 下面是问题:

编写一个程序,用另一个字符串(例如s)替换主字符串(例如PS)中给定字符(例如c)的出现。

输入:第一行包含主字符串(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;
}

我不能用字符串替换字符。 它只是给我一个垃圾输出来代替我要替换的字符。

但是,当我将其声明为字符时,输出是预期的。 它将字符替换为另一个字符。

你能帮我这个忙吗?

在C语言中,字符串是一个字符序列,由第一个地址表示。 因此, *ptr = s应该向您发出有关编译器类型不匹配的警告。 如果要将字符串插入另一个字符串,则需要四处移动其他字符以为其腾出空间。

但是,您的问题描述似乎并不要求您输入新的字符串,只需打印输出一样即可 因此,您可以遍历原始字符串,对于每个字符,如果要替换它,请打印替换字符串,否则打印原始字符。

*ptr=s;

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

实际上是将字符数组s的基地址分配给ptr指向的存储位置。 那不会用字符串替换字符,但是会导致错误。

我同意亚诺 最好创建一个新的字符数组来存储结果字符串,因为原始数组可能没有足够的空间来容纳新字符串。

如果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); 因为数组的名称会衰减为指向其第一个元素的指针

最好避免像Sourav Ghosh提到的gets()fflush(stdin)

fgets()gets()更安全, 因为您可以保证不会溢出输入字符串缓冲区

至于fflush(stdin)错误,请看这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM