AcWing-770. 單詞替換
阿新 • • 發佈:2022-01-16
[題目描述]
輸入一個字串,以回車結束(字串長度不超過 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; }