可能重复:
如何拆分字符串?
将字符串拆分为字符串向量的正确方法是什么.分隔符是空格或逗号.
我想用c ++读取csv文件,所以这是我的代码
int main(){
ifstream classFile("class.csv");
vector<string> classData;
while (getline(classFile, line,',')) // there is input overload classfile
{
classData.push_back(line);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题:我的问题是当它读取每行的最后一列时(因为它没有用逗号分隔),它读取最后一列数据和下一行数据的第一列,例如,如果我的数据是
className,classLocation,c ++教授,图书馆,约翰
然后它读起来像className/classLocation/Professor c ++/Library/John
无论如何,我可以将我的最后一列与下一行中的第一列分开吗?谢谢,抱歉这令人困惑
我想逐字阅读文本,以简单的方式避免任何非字母数字字符。在从带有空格和 '\n' 的文本“进化”之后,我需要解决这个问题,以防还有 ',', '.' 例如。第一种情况是通过使用带有分隔符“ ”的 getline 来解决的。我想知道是否有一种方法可以使用getline多个分隔符,甚至某种正则表达式(例如 '.'|' '|','|'\n')。
据我所知,它的getline工作方式是从输入流中读取字符,直到delimiter到达'\n' 或字符为止。我的第一个猜测是为它提供多个分隔符非常简单,但我发现事实并非如此。
编辑:作为澄清。任何 C 风格(例如 strtok,在我看来非常丑陋)或算法类型的解决方案都不是我想要的。想出一个简单的算法来解决这个问题并实现它是相当容易的。我正在寻找一个更优雅的解决方案,或者至少解释为什么我们不能用getline函数来处理它,因为除非我完全误解了,否则应该能够以某种方式接受多个分隔符。
可能重复:
在C++中通过多个分隔符将字符串拆分为单词
我目前正在尝试读取一个文件,其中每行都有一个选项卡和空格的变体,用于分隔需要插入二叉树的关键属性.
我的问题是:如何仅使用STL使用多个分隔符拆分一行?我一直试图在这一天的大部分时间都不知所措.
任何建议将非常感谢.
我有一个像这样的字符串:
"CA: ABCD\nCB: ABFG\nCC: AFBV\nCD: 4567"
Run Code Online (Sandbox Code Playgroud)
现在": "从值中拆分键,同时\n将对分离。我想将键值对添加到C ++中的映射中。
有没有考虑优化的有效方法?
因此,我必须将短语“ Hello,每个人!这是:COSC-1436,SP18”拆分为单独的标记,删除所有标点符号减去破折号。因此输出应为:
你好
大家
这个
是
COSC-1436
SP18
然后,我必须加密覆盖的每个令牌。我只是在使用多个定界符时遇到麻烦。这是我目前所拥有的。
功能原型:
void tokenize(const string&, const string&, vector<string>&);
函数调用:
tokenize(code, " .,:;!?", tokens);
功能定义:
void tokenize(const string& str, const string& delim, vector<string>& tokens)
{
int tokenStart = 0;
int delimPos = str.find_first_of(delim);
while(delimPos != string::npos)
{
string tok = str.substr(tokenStart, delimPos - tokenStart);
tokens.push_back(tok);
delimPos++;
tokenStart = delimPos;
delimPos = str.find_first_of(delim, delimPos);
if(delimPos == string::npos)
{
string tok = str.substr(tokenStart, delimPos - tokenStart);
tokens.push_back(tok);
}
}
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,在程序遇到标点符号的地方,现在有标记作为空白。有什么建议么?