2012-10-04 55 views
0

我一直運行到一個問題,這個代碼在C++:C++不能獲取用戶輸入的strtok

#include <stdio.h> 
#include <string.h> 
#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    string words[25]; 
    int i = 0; 
    char * word; 
    cout << "Input a phrase, no capital letters please."; 
    char phrase[100] = "this is a phrase"; 
    word = strtok (phrase, " ,."); 

    while (word != NULL) 
    { 
     i++; 
     words[i] = word; 
     cout << words[i] << " "; 
     word = strtok (NULL, " ,.-"); 
     int g = 0; 
    } 
    cout << endl << endl; 

    int g = 0; 
    while (g < i) 
    { 
     g++; 
     char f = words[g].at(0); 
     if ((f == 'a') || (f == 'e') || (f == 'i') || (f == 'o') || (f == 'u') || (f == 'y')) 
     { 
     words[g].append("way"); 
     cout << words[g] << " "; 
     } 
     else 
     { 
     words[g].erase (0,1); 
     cout << words[g] << f << "ay" << " "; 
     } 

    } 
    cout << endl; 
    system("PAUSE"); 
} 

其實我是想我的程序用戶生成的短語放在炭語[100]但我無法弄清楚正確的語法來啓動它的輸入,而不用搞砸翻譯。

這是一個將短語翻譯成豬拉丁文順便說一句的程序。

+1

什麼的代碼最小的片段那會導致問題?請張貼,所以我們不需要通讀整個程序。換句話說,我認爲你的問題是,「如何將用戶輸入讀入C++中的char數組?」 –

+6

如果你正在編寫C++並使用'strtok',你幾乎肯定會做錯某些事情。 – pmr

回答

2

你想要的是:

char phrase[100]; 
fgets(phrase, 100, stdin); 

雖然,作爲評價和對方回答說,您使用的是C++的C字符串函數,這是非常奇怪的。你不應該這樣做,除非你被任務或某事所要求。

而是使用:

string input; 
getline(cin, input); 

來標記,你可以做到以下幾點:

string token; 
size_t spacePos; 
... 
while(input.size() != 0) 
{ 
    spacePos = input.find(" "); 
    if(spacePos != npos) 
    { 
     token = input.substr(0, spacePos); 
     input = input.substr(spacePos + 1); 
    } 
    else 
    { 
     token = input; 
     input = ""; 
    } 

    // do token stuff 
} 

或者,跳過所有的爵士樂:

string token; 

while(cin >> token) 
{ 
    // Do stuff to token 
    // User exits by pressing ctrl + d, or you add something to break (like if(token == "quit") or if(token == ".")) 
} 
+0

很好的解釋和例子! +1 –

+1

Ty,現在我終於沒有想到需要編輯的東西了:P – CrazyCasta

+0

您最後一個例子稍微有些破碎:http://ideone.com/wpO2G(注意輸入與輸出相比) - 這是更好:http://ideone.com/AzWYa –

2

在C++中執行終端I/O的首選方式是流。使用std::cinstd::getline函數從輸入輸出中讀取字符串。

std::string input; 
std::getline(std::cin, input); 

之後,你可能想擺脫strtok看看這question瞭解如何做字符串標記化在C++。

+0

您的語句錯誤地指出'getline'是'std :: string'的成員,但是您的代碼正確地表明它不是。 –

+0

@BenjaminLindley謝謝。固定。 – pmr