2013-08-19 53 views
16

我剛開始學習C++。我只是在玩弄它,並遇到了一個問題,其中涉及逐字輸入一個字符串,每個單詞由一個空格分隔。我的意思是,假設我有以字爲單位輸入字符串字段

name place animal 

作爲輸入。我想讀第一個字,做一些操作。然後閱讀第二個單詞,對其進行一些操作,然後閱讀下一個單詞,以此類推。

我最初試圖用函數getline存儲整個字符串這樣

#include<iostream> 
    using namespace std; 
    int main() 
    { 
    string t; 
    getline(cin,t); 
    cout << t; //just to confirm the input is read correctly 
    } 

但後來我怎麼上的每個字進行操作並移動到下一個單詞?另外,雖然在Google上搜索的時間很多,但我在許多地方看到,不是使用「使用命名空間標準」,而是傾向於使用「std ::」 來編寫所有內容。爲什麼?我認爲他們做同樣的事情。那爲什麼不費吹灰之力呢?

+0

[爲什麼「使用命名空間std」被認爲是不好的做法?](http://stackoverflow.com/q/1452721/995714) –

回答

44

由字放線的字符串流和提取背單詞:

#include <iostream> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string t; 
    getline(cin,t); 

    istringstream iss(t); 
    string word; 
    while(iss >> word) { 
     /* do stuff with word */ 
    } 
} 

當然,你可以直接跳過,則對getline部分和cin直接讀取一字一句。

在這裏,你可以閱讀why is using namespace std considered bad practice.

+0

我試圖與CIN閱讀。但是由於單詞之間被空白分開,所以cin似乎只讀了第一個單詞。一個簡單的 cin t; cout t; 顯示。因此,我轉向了getline。 – aandis

+2

@zack while循環解決了「問題」 – sehe

+0

@jrok在你給出的代碼上出現編譯錯誤。 錯誤:變量'std :: istringstream iss'有初始值設定項,但不完整類型 – aandis

1

函數getline是存儲整個行一次,這是不是你想要的。一個簡單的解決方法是有三個變量,並使用cin來獲取它們。 C++將自動解析空間。

#include <iostream> 
using namespace std; 

int main() { 
    string a, b, c; 
    cin >> a >> b >> c; 
    //now you have your three words 
    return 0; 
} 

我不知道是什麼特別的「操作」你說什麼,所以我不能幫你那裏,但如果它的變化特徵,對字符串和指數閱讀起來。 C++文檔非常棒。至於使用namespace std;與std ::和其他庫相比,已經有很多說。在StackOverflow上嘗試thesequestions以啓動。

+0

字符串中的字數未知。任何用cin讀取單詞的方法呢? – aandis

+0

http://stackoverflow.com/questions/8683302/how-to-split-a-space-separated-string-into-multiple-strings-in-c –

+0

你可以做一些事情getline和消除字符太http:///www.minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm –

3

(這是給別人誰可以參考的利益)

您可以簡單地使用CIN字符數組。 cin輸入由它遇到的第一個空白分隔。

#include<iostream> 
using namespace std; 

main() 
{ 
    char word[50]; 
    cin>>word; 
    while(word){ 
     //Do stuff with word[] 
     cin>>word; 
    } 
}