标题.h
#include <iostream>
#include <vector>
class CombatLine{
std::stringstream Line;
std::vector<std::string> TokenLine;
void SetLine(std::string s){
Line<<s;
}
public:
void SetTokenLine(){
int i=0;
while(i<5){
Line>>TokenLine[i];
i++;}
TokenLine.resize(i);
for(int j=0;j<5;j++)
cout<<TokenLine[j];}
主要.cpp
#include "Header.h"
using namespace std;
int main () {
CombatLine Line1;
Line1.SetLine("[Combat] A bird attacks -Anthrax- and misses (dodge).");
Line1.SetTokenLine();
}
此构建但我收到此运行时错误,/cygdrive/C/Program Files/NetBeans 6.9.1/ide/bin/nativeexecution/dorun.sh: line 33: 4500 Segmentation fault <core dumped> sh "$<SHFILE>"
我知道这与我在 SetTokenFile 中操作字符串和流的方式有关,但我似乎无法确定是什么。
这是一个更大项目的一小部分。总的来说,我将解析一个动态文本文件,然后对整个文件的内容进行比较。
最佳答案
您不能直接写入 TokenLine[i]
,因为它在您的 CombatLine
构造函数中被初始化为一个空的 vector
。如果您在阅读每一行时构建 vector ,则不需要 resize
。
试试这个:
void SetTokenLine(){
int i=0;
string nextLine;
while(i<5){
Line>>nextLine;
TokenLine.push_back(nextLine);
i++;}
for(int j=0;j<5;j++)
cout<<TokenLine[j];}
或者,您可以在默认 CombatLine
构造函数中的 vector
中预分配 5 个条目,但如果您要处理的 token 数量发生变化,这会很脆弱。使用下面的代码,如果 0 <= i <= 4,您可以直接从 stringstream
写入 TokenLine[i]
。
CombatLine::CombatLine() : TokenLine(5)
{
}
关于c++ - Stringstream 到字符串逻辑 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4288383/