簡體   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