如何在C ++中使用两个分隔符(;和。)从字符串中获取子字符串

时间:2016-11-06 04:16:06

标签: string c++11 substring

我有这种用户输入:

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

现在我想解析这个输入并获取所有子字符串直到分号并在遇到句号符号时停止扫描。

实现这一目标的最简单方法是什么?

此外,我可以自由地从文件或控制台获取输入。哪一个最容易实现?

我有一个从控制台读取的方法:

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

但是,如果我输入上面提到的样本输入,我只读取直到收到句号符号之前。因此,在寻找子字符串时,我应该采取什么停止标准或标志?

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

1 个答案:

答案 0 :(得分:1)

对所有行使用getline和delim ;。检查最后一行的点(。)。

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