1. 程式人生 > 其它 >AcWing-770. 單詞替換

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 <iostream>
#include <cstring>
#include <algorithm>

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<stdio.h>
#include<string.h>
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;
}