AcWing-770. 单词替换
770. 单词替换
[题目描述]
输入一个字符串,以回车结束(字符串长度不超过 100)。
该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。
现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。
[输入格式]
输入共 3 行。
第 1 行是包含多个单词的字符串 s;
第 2 行是待替换的单词 a(长度不超过 100);
第 3 行是 a 将被替换的单词 b(长度不超过 100)。
[输出格式]
共一行,输出将 s 中所有单词 a 替换成 b 之后的字符串。
[输入样例:]
You want someone to help you
You
I
[输出样例:]
I want someone to help you
这里主要为了记录一下怎么在C++中一行读入多个字符串。
C++解法
这是一个比较暴力的方法,先开一个很大的字符串数组,然后依次将每个字符串读入即可,直到读到换行符才退出。
#include
#include
#include
using namespace std;
const int N = 10010;
string words[N];
int main()
{
int idx = 0;
while(cin >> words[idx])
{
idx++;
char c = getchar();
if(c == '\n') break;
}
string p, q;
cin >> p;
cin >> q;
for(int i = 0; i < idx; i++)
{
if(words[i] == p)
printf("%s ", q.c_str());
else
printf("%s ", words[i].c_str());
}
return 0;
}
C语言解法
以上做法用到了string, 而string需要调用c_str()
函数方可转换为char *
类型,所以考虑直接用char[][]二维数组来解此题。
#include
#include
int main()
{
char a[105][105],b[105],c[105],ch;
int p=0,q=0;
while(scanf("%c",&ch) && ch != '\n')
{
// 读完了一个单词,重置二维的计算器,增加一维的索引
if(ch == ' ')
{
p++;
q=0;
}
else a[p][q++] = ch;
}
gets(b);
gets(c);
for(int i = 0; i <= p; i++)
{
if(strcmp(a[i], b) == 0)
strcpy(a[i], c);
printf("%s ", a[i]);
}
return 0;
}