字符串替换问题,写了几个都运行不出来,有无正确的程序

编写程序,读入一行字符(长度小于1000)a,再输入两个字符串b和c,将a中的所有字符串b替换成字符串c并输出。

img

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string a, b, c;
    getline(cin, a);
    cin >> b >> c;
    for (size_t pos = 0; (pos = a.find(b, pos)) != string::npos; pos += b.length())
        a.replace(pos, b.length(), c);
    cout << a << endl;
    return 0;
}
$ g++ -Wall main.cpp
$ ./a.out
abcd abc dd
ab EEE
EEEcd EEEc dd

C语言的

img

#include<stdio.h>
#include<string.h>
int main()
{
    char t[1000],p1[1000],p2[1000];
    gets(t);
    gets(p1);
    gets(p2);
    int n1=strlen(t),n2=strlen(p1),n3=strlen(p2);
    for(int i=0; i<n1; i++)
    {
        for(int j=0; j<n1; j++)
        {
            if(j-i+1==n2)
            {
                int flag=1;
                int p=0;
                for(int h=i; h<=j; h++)
                {
                    if(t[h]!=p1[p++])
                    {
                        flag=0;
                        break;
                    }
                }
                if(flag==1)
                {
                    p=0;
                    for(int h=i; h<=j; h++)
                    {
                        t[h]=p2[p++];
                    }
                    if(n3-n2>0)
                    {
                        int len=strlen(t);
                        for(int h=0; h<len-i-1; h++)
                        {
                            t[len+(n3-n2)-1-h]=t[len+(n3-n2)-1-h-1];
                        }
                        p=0;
                        for(int h=i; h<=i+n2-n2; h++)
                        {
                            t[h+n2]=p2[n2+p++];
                        }
                       // for(int h=)
                    }
                }

            }

        }
    }
    puts(t);
    return 0;
}

题目要求写错吧。EEE也是输入要求吧。

#include<stdio.h>

int main()
{
    int i, j, k;
    char a[1000], b[1000], c[1000], d[1000] = {0};
    char *p=d;
    fgets(a, 1000, stdin);
    fgets(b, 1000, stdin);
    fgets(c, 1000, stdin);
    for (i = 0; a[i]; i++)
    {
        for (j = 0; b[j]!='\n'; j++)//fgets获取的字符串结尾有\n换行符,比较到\n代表结束。
        {
            if (a[i + j] != b[j])//从a[i]开始比较,看a[i]到a[i+j]是否都等于字符串b对应字符,有一个不等就结束循环。
                break;
        }
        if (b[j] == '\n')//字符串b已经比较到结尾没有不符合的
        {
            for (k = 0; c[k]!='\n'; k++)//把字符串c复制到字符串d
                *p++ = c[k];
            i += j-1;//i偏移到最后一个跟b相比的地方
        }
        else
            *p++ = a[i];//从a[i]开始没有匹配b字符串的,就将a[i]复制到字符串d
    }
    printf("%s", d);
    return 0;
}

#include<stdio.h>
int main()
{
char a[100];
char b[100];
int i=0,j,k;
scanf("%s",a);
j=0;

for(i=0;a[i];i++)
{
if(a[i]>='a'&&a[i]<='z')
a[j++]=a[i]-32;
}
a[j]=0;
printf(a);

}

代码如下:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str_a;
    getline(cin, a);
    string str_b;
    string str_c;
    cin >> b >> c;
    for (size_t p = 0; (p = str_a.find(str_b, pos)) != string::npos; p = p + str_b.length())
    {
        str_a.replace(p, str_b.length(), str_c);
    }
    cout << str_a << endl;
    return 0;
}

如有帮助,请采纳,十分感谢!