在 C++ 中拆分字符串

Posted

技术标签:

【中文标题】在 C++ 中拆分字符串【英文标题】:spliting a string String in c++ 【发布时间】:2011-05-09 12:06:05 【问题描述】:

我有一个函数MakeElementfromString( string k ) 我想拆分字符串并用它制作struct elementint nr, string s。 我能用什么来做到这一点?找到strtok,但无法使用它,或者我不知道如何使用,因为它适用于char 和一些stringstream 方法.. 对我没有任何作用 谁能告诉我一个想法?我不是 C++ 专家,所以请解释一下 :) 谢谢

【问题讨论】:

如果您使用 C++ 字符串,请使用 substr(),而不是 strtok。 您希望如何将字符串转换为结构?你试过什么了?什么有效,什么无效?这是一个家庭作业问题吗? 变量“nr”代表什么? C++: How to split a string? 的可能重复项 @user745087:我根据有限的信息尝试了一些东西。看看这是否达到目的? 【参考方案1】:

如果可以使用库,请使用 boost::split。

如果你不能遍历你的字符串并将这些部分放在一个向量中。

string s("test hallo! someothertest");
char separator = ' ';
vector<string> parts;
int token_begin = 0;
for(int i = 0; i < s.size(); ++i)
  if( s[i] == separator)
     parts.push_back(s.substr(token_begin, i - token_begin ));
     token_begin = i + 1;
  


//get last token if does not end with a separator
if(token_begin != s.size())
  parts.push_back(s.substr(token_begin, s.size() - token_begin));

【讨论】:

【参考方案2】:

在撰写本文时,尚未对问题进行编辑以说明 OP 如何将字符串转换为结构元素。但这是如何完成的大致轮廓。

假设:字符串 s 的前两个字符进入 struct 的 int 成员,其余字符进入字符串部分。

示例:s = 01hello 伪代码:

string num = s.substr(0, 2);  
string rest = s.substr(3);  

element e;
e.setVal(num, rest);

setVal(string n, string m) 
  str = m;
  istringstream buffer(n);
  buffer >> num;

原始结构在哪里:

struct element 
 int nr;
 string str;
;  

【讨论】:

@user745087:如果它解决了你的问题,你应该投票并标记正确的答案。【参考方案3】:

感谢您的帮助 为

struct Telem 
int nrte;
string s;
int dims;
;

我需要从文件中读取一行并将该行转换为我的愿望元素希望它可以帮助其他人解决类似问题

Telem TelemDinString( string k )

    Telem a;
    Init(a);

    string buf;
    stringstream ss(k);
    vector<string> tokens;
    while ( ss >> buf )
        tokens.push_back(buf);
    int nr;

    stringstream convert( tokens[0] );
    if ( !( convert >> nr ) )
        nr=-1;
    a.nrte = nr;
    a.s = tokens[1];
    a.dims=a.s.length();

return a;

【讨论】:

以上是关于在 C++ 中拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 C++ 中拆分数组?

拆分字符串的最佳方法是啥? (c++) [重复]

在 C++ 中使用 istringstream 将字符串拆分为整数

在 C++ 中拆分点上的字符串并从中提取所有字段?

使用命令 std::string::substr 在 C++ 中拆分字符串

如何在 C++ 中拆分字符串而不将其他库安装到标准 Ubuntu 版本? [复制]