這次的題目是

英文斷詞

http://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?a=15924

問題描述 :

斷詞在自然語言的研究上是個很重要的步驟,主要就是將關鍵字從句子中斷出,英文的斷詞較為簡單,就根據句子中的空格將英文字隔開。

輸入說明 :

輸入一句英文敘述句。 字元數≤1000。

輸出說明 :

將輸入的句子進行斷詞,將斷出的關鍵字依照句子中的出現排序列印出。全部轉成小寫,列印出的關鍵字不得重複,關鍵字間以一個空格隔開,最後一個關鍵字後面進行換行。例如輸入 How do you do ,則輸出 how do you 。

範例 :

輸入範例

輸出範例

How do you do

how do you

 

這個題目重點就是要教如何用空白分割和大小寫用ASCII code 切換跟vector陣列

好,開始講解

首先,宣告字串string,讓使用者輸入

最上面記得打上#include <string.h>才可以用string的函式

再來是分割句子中每個詞

該怎麼寫哩

就要用到istringstream這個函式

要用這個的話,開頭得打上#include <sstream>

istringstream delim(input);

這行的意思是這個函式可以把input讀入到delim裡面

上面那行while迴圈的寫法是

getline(delim[來源位置],token[存入位置],' '[分割的條件])[讀入字串,遇到空白時分割,將分割出來的字串存入token]

以上條件成立時,開始以下動作

再來是迴圈裡要做甚麼

題目要印出沒重複的詞,並且每個字母都要是小寫

所以,從對每一個切出來的字串開始

首先,用for迴圈來判斷切出來的詞中,是不是都是小寫

如果不是,就轉,所以要透過ASCII code來將大寫轉成小寫

大寫的A~Z的ASCII  code介在65~90

而小寫的a~z ASCII code 則介在97~122

將token裡有大寫字母的位置的值都加上32,就能轉成小寫

再來是判斷有沒有重複

所以,一個一個切,一個一個放進陣列

這裡要講解的陣列是vector

在最上面要打上#include <vector>

vector的好處是,它在存入東西時,就像排隊一樣,先存的排第一個,依此類推

可以不用像C,需要先寫範圍

寫法是vector<型別>名稱

就跟排五月天的票和排蘇打綠的票一樣

兩個不同團的粉絲不能同時排在一起

所以不同型別的也不能同時存入一個vector陣列

再來,判斷有切出來的詞有沒有相同的已經在陣列裡了

沒有就存

存進去的寫法是陣列名稱.push_back(東西)

最後把陣列裡的東西印出來,這題就解決啦

  1. #include <iostream>  
  2. #include <vector>  
  3. #include <string.h>  
  4. #include <sstream>  
  5. using namespace std;  
  6.   
  7. int main()  
  8. {  
  9.     vector<string>arr;  
  10.     string input;  
  11.     getline(cin,input);  
  12.     istringstream delim(input);  
  13.     string token;  
  14.     int c=0;  
  15.     while(getline(delim,token,' '))  
  16.     {  
  17.         int k=0;  
  18.         int len=token.size();  
  19.         for(int k=0;k<len;k++)  
  20.         {  
  21.             if(token[k]>64 && token[k]<91)  
  22.                 token[k]+=32;  
  23.         }  
  24.         for(int i=0;i<c;i++)  
  25.         {  
  26.             if(token==arr[i])  
  27.                 k=1;  
  28.         }  
  29.         if(k!=1)  
  30.         {  
  31.             arr.push_back(token);  
  32.             c++;  
  33.         }  
  34.     }  
  35.     for(int j=0;j<c;j++)  
  36.     {  
  37.         if(j!=c-1)  
  38.             cout<<arr[j]<<" ";  
  39.         else  
  40.             cout<<arr[j]<<endl;  
  41.     }  
  42.     return 0;  
  43. }  

 

 

 

若想閱讀相關文章請關注我的粉絲團

小資菜鳥向前衝

https://www.facebook.com/%E5%B0%8F%E8%B3%87%E8%8F%9C%E9%B3%A5%E5%90%91%E5%89%8D%E8%A1%9D-204484273323335/?fref=ts

arrow
arrow
    文章標籤
    程式設計 題目介紹
    全站熱搜

    cychss6305 發表在 痞客邦 留言(2) 人氣()