c++ - Stringstream 到字符串逻辑 C++

标签 c++ stringstream

标题.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/

相关文章:

c++ - 相交线与二次贝塞尔三角形

c++ - 基础/派生模板类类型

c++ - 在 C++03 中将 std::string 转换为 int

C++ stringstreams with std::hex

C++ 使用条件语句读取文本文件

c++ - 该语句如何检查 "T cannot be compared to nullptr"?

c++ - 创建 C++ 单例实例是否安全?

c++ - boost 链接错误

c++ - 如何从字符串中删除第一个单词?

c++ - 当 >> 字符串流时更改双引号的行为