2016-11-06 70 views
1

我有這樣的一個用戶輸入:如何使用兩個分隔符的字符串獲得子串(和)在C++

A+B*C; 
A*(B+c); 
C+F. 

現在我要分析此輸入,並得到所有子直到分號爲止的字符串,並在遇到週期符號時停止掃描。

實現此目的最簡單的方法是什麼?

另外,我可以自由地從文件或控制檯獲取輸入。哪一個最容易實現?

我有從控制檯讀取作爲這樣的方法:

cout << "Enter input: " << endl; 
char delimiter = '.'; 
string inputStr; 
getline(cin,inputStr,delimiter); 
cout << inputStr; 

但是,如果我進入上述樣品輸入I只讀直到週期符號被收到之前。所以,當找到子字符串時,我應該採取什麼樣的停止標準或標誌?

TIA

編輯:1級

到目前爲止的代碼:

#include <string> 
#include <iostream> 

using namespace std; 

int main() 
{ 
    cout << "Enter input: " << endl; 
    char delimiter = '.'; 
    string inputStr; 
    getline(cin,inputStr,delimiter); 
    cout << inputStr; 
    string deli = ';'; 

    size_t pos = 0; 
    string token; 
    while ((pos = inputStr.find(deli)) != std::string::npos) { 
     token = inputStr.substr(0, pos); 
     std::cout << token << std::endl; 
     inputStr.erase(0, pos + deli.length()); 
    } 
    std::cout << inputStr << std::endl; 
}; 

答:

我被錯誤地初始化字符串deli。我必須這樣做:

string deli = ";"。而不是單引號,我不得不使用雙引號,因爲它是一個字符串,而不是一個字符!最終的工作解決方案在這裏:https://repl.it/EPyC/2

+0

做了getline(cin,inputStr,delimiter)之後;爲什麼不把你的inputStr傳遞給另一個函數parse_by_semicolon(inputStr),它可以滿足你的需求?當然你必須編寫算法來解析inputStr';'現在 – solti

+0

感謝@solti的關注。請看我更新的問題。我有上面提到的算法,但是我得到一個錯誤:'main.cpp:13:19:錯誤:從'char'無效轉換爲'const char *'[-fpermissive] string deli =';';'。你可以在這裏測試我的代碼:https://repl.it/EPyC/0 –

+0

好的錯誤解決了!這個帖子幫助:http://stackoverflow.com/questions/26816229/c-invalid-conversion-from-char-to-const-char-fpermissive –

回答

1

使用getline與delim ;所有行。檢查最後一行的點(。)。

string line; 
while(getline(cin, line, ';')){ 
    if(line.back() == '.') 
     line.pop_back(); 
    cout << line <<endl; 
} 
+0

感謝您的回答!但我也可以有超過3個輸入! –

+0

在這種情況下,您的示例輸入應該看起來像「A + B * C; A *(B + c); // ...; C + F.' –

+0

最後的工作解決方案在這裏:https://repl.it/EPyC/2 –

相關問題