我有這樣的一個用戶輸入:如何使用兩個分隔符的字符串獲得子串(和)在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
做了getline(cin,inputStr,delimiter)之後;爲什麼不把你的inputStr傳遞給另一個函數parse_by_semicolon(inputStr),它可以滿足你的需求?當然你必須編寫算法來解析inputStr';'現在 – solti
感謝@solti的關注。請看我更新的問題。我有上面提到的算法,但是我得到一個錯誤:'main.cpp:13:19:錯誤:從'char'無效轉換爲'const char *'[-fpermissive] string deli =';';'。你可以在這裏測試我的代碼:https://repl.it/EPyC/0 –
好的錯誤解決了!這個帖子幫助:http://stackoverflow.com/questions/26816229/c-invalid-conversion-from-char-to-const-char-fpermissive –