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;
}