九度OJ1111題-單詞替換
阿新 • • 發佈:2017-06-10
string類型 一行 some clu ets 研究 arch tab 默認
題目1111:單詞替換
時間限制:1 秒
內存限制:32 兆
特殊判題:否
提交:6752
解決:1891
- 題目描述:
-
輸入一個字符串,以回車結束(字符串長度<=100)。該字符串由若幹個單詞組成,單詞之間用一個空格隔開,所有單詞區分大小寫。現需要將其中的某個單詞替換成另一個單詞,並輸出替換之後的字符串。
- 輸入:
-
多組數據。每組數據輸入包括3行,
第1行是包含多個單詞的字符串 s,
第2行是待替換的單詞a,(長度<=100)
第3行是a將被替換的單詞b。(長度<=100)
s, a, b 最前面和最後面都沒有空格.
- 輸出:
-
每個測試數據輸出只有 1 行,
將s中所有單詞a替換成b之後的字符串。
- 樣例輸入:
-
You want someone to help you You I
- 樣例輸出:
-
I want someone to help you
- 來源:
- 2007年北京大學計算機研究生機試真題
- 代碼:
-
1 #include <iostream> 2 #include <stdio.h> 3 #include <string> 4 #include <ctype.h> 5 using namespace std; 6 7 int main() { 8 char stra[201]; 9 while(gets(stra)){
一開始沒有寫 if ((a[pos-1] == ‘ ‘ || pos == 0) && (a[pos + b.size()] == ‘ ‘) || a[pos + b.size()] == 0){
這一行,導致一直是WA還不知道為什麽
應該是表示必須是“單詞替換”,所以被替換的地方前後都要有空格
或者是開頭(pos == 0)和結尾( a[pos + b.size()] == 0)
對於 a[pos + b.size()] == 0要解釋一下:
因為是
char stra[201];
string a = stra;
所以在stra中沒有內容的部分默認是0,拷貝給a的都是有內容的部分,而string類型對於超出邊界的下標指向的字符,填充的正好也是0
所以 a[pos + b.size()] == 0表示超出了單詞長度,也就是被替換的是最後一個單詞(如果被替換了最後兩個單詞呢?這樣兩個單詞中間就有空格了!?)
其實這道題出的不好,並沒有說明白必須都是單詞,如果是單詞中的某個字符是不允許被替換的,所以要加限制條件
九度OJ1111題-單詞替換