如何使用两个分隔符的字符串获得子串(和)在C++
我有这样的一个用户输入:如何使用两个分隔符的字符串获得子串(和)在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
与delim ;
所有行。检查最后一行的点(。)。
string line;
while(getline(cin, line, ';')){
if(line.back() == '.')
line.pop_back();
cout << line <<endl;
}
感谢您的回答!但我也可以有超过3个输入! –
在这种情况下,您的示例输入应该看起来像“A + B * C; A *(B + c); // ...; C + F.' –
最后的工作解决方案在这里: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 –