编写程序,读入一行字符(长度小于1000)a,再输入两个字符串b和c,将a中的所有字符串b替换成字符串c并输出。
#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语言的
#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;
}
如有帮助,请采纳,十分感谢!