2016-11-06 71 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 –

相关问题