【基础题】字符串替换
问题 X: 字符串替换
时间限制: 1 Sec 内存限制: 128 MB[提交][状态][讨论版]
题目描述
编写一个程序实现将字符串中的所有"you"替换成"we"
输入
输入包含多行数据
每行数据是一个字符串,长度不超过1000
数据以EOF结束
每行数据是一个字符串,长度不超过1000
数据以EOF结束
输出
对于输入的每一行,输出替换后的字符串
样例输入
you are what you do
样例输出
we are what we do
思路:
C的思路(比较麻烦)
把'y','o','u'存到一个字符数组里,再把输入的字符串放到一个字符数组里,然后用指针遍历字符串,如果对应的字符相同,则++,不相同则置为0,如果加到3则把"you"换换成"we",然后让字符串数组的各个字符往前替换。
用C++的话直接写就行了
C代码如下:
#include <stdio.h> #include <stdlib.h> int main() { char s[1000]; char ss[3]; int i=0,j=0,k; ss[0]='y'; ss[1]='o'; ss[2]='u'; char *p1,*p2; p2=ss; while(gets(s)!=NULL){ p1=s; i=0; while(*(p1+i)!='\0'){ if(*(p1+i)!=*(p2+j)){ j=0; } if(*(p1+i)==*(p2+j)){ j++; } if(j==3){ *(p1+i-1)='e'; *(p1+i-2)='w'; k=i; while(*(p1+k)!='\0'){ *(p1+k)=*(p1+k+1); k++; } } i++; } printf("%s\n",s); } return 0; }
C++代码如下
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <string> using namespace std; void string_place(string &s1,string &s2,string &s3); int main() { string s1,s2="you",s3="we"; while(getline(cin,s1)){ string_place(s1,s2,s3); cout<<s1<<endl; } return 0; } void string_place(string &s1,string &s2,string &s3){ string::size_type pos=0; string::size_type a=s2.size(); string::size_type b=s3.size(); while((pos=s1.find(s2,pos))!=string::npos){ s1.replace(pos,a,s3); pos+=b; } }
总结:
1)C中当要输入多组测试数据,且要输入的是字符数组,且字符串中带空格时用
while(gets(s)!=NULL){}
2)C++连续输入多个肯能带空格的字符串
传送门:http://blog.csdn.net/wyh7280/article/details/46957135(注:该博主写的第二个方法我写时出现了error,各位知道咋回事的大佬麻烦说一下)
3)C++字符串替换的两种方法:
传送门:http://blog.csdn.net/crazyer2010/article/details/9063847
祝你早日攒够失望,然后开始新的生活。