??我太難了我太菜
思路主要來自這個排在第一的高讚回答,這個答主寫了兩種方法,第一種一般人學不來,但是第二種比較好理解,做了那個例題之後,順著這種思路就解了這道題。
主要過程就是:
獲取輸入
統一大小寫
然後是最關鍵的統計單詞數
統計單詞數的思路如下:
(1)用到的變數:
count 用來記錄有幾個匹配的單詞
state = 0 表示當前指向的目的字串的位置是空格,=1表示是字元
index 指向源字串的第index個字元
flag = 0 表示字元匹配失敗 ,=1 表示匹配成功
first 用來記錄第一次匹配到的單詞首字母的位置
先用目的字串的第乙個字元來初始化state,還有flag。
然後迴圈遍歷目的字串的每乙個字元(除0號位的),如果當前是空格且前一位是字元時,就可以根據flag和index的結果來判斷上乙個詞的匹配是否成功。記得每次掃過乙個詞遇到第乙個空格時把index重新指向源字串的0號位。
如果當前是字元並且前一位是空格,說明是乙個詞的第一位,如果第一位都和源字串的第一位不匹配,置flag為0,否則為1。如果當前是字元並且前一位也是字元,就根據flag的情況判斷之前匹配的結果,如果之前都匹配上了,這一位繼續匹配,如果之前就沒有匹配上,那麼就不用做什麼。
特別注意,迴圈完之後,要判斷一下最後的flag是不是1,因為可能是字元結尾,這樣就沒有包括在迴圈裡面。所以要加乙個判斷。
#include
#include
#include
#include
using
namespace std;
void
strlower
(char
* a)}}
intmain()
else
}for
(int i =
1; a[i]
; i++)}
} index =0;
}else
else
}//當前是字元,之前是字元
else
else}}
}}if(flag ==1)
if(count ==0)
else
return0;
}
看了一些大佬解法覺得自己簡直弱爆了,指標也不會orz 洛谷P1308 統計單詞數
基本思路 1.讀入字串 2.轉化大小寫 3.查詢空格並提取字串 4.比較 實現過程中需注意的細節 1.需用getline整行讀入,因為cin讀入到空格時會停止。注意 使用getline用鍵盤輸入字串末會有空格,但使用測試資料不會出現空格 2.為了方便提取最後乙個單詞,讀入結束後在字串最後新增乙個空格...
洛谷 P1308 統計單詞數
第一題那個isbn那個死活過不了,我下了in和out的資料看了也是一模一樣,無奈。這個是過了的。處理的思路和實驗十二 2018 d.實驗10 9 指標陣列高階有點像,用兩個指標來確定單詞。include intmatchignorecase char char 不區分大小寫的檢測函式 intmain...
洛谷 P1308 統計單詞數 總結
寫這道題的時候思路變了好幾次,也卡了好久,最終想到一種比較適合像我這樣的初學者理解的一種解法。大概思路 大概思路就是比較單詞和句子,如果有一樣的就記錄次數和第一次出現的位置。儲存輸入的單詞和句子 c include include char word 20 sen 1000000 寫外面空間大 in...