【问题标题】:How to cut string at various signs如何在各种标志处剪线
【发布时间】:2013-02-20 21:16:27
【问题描述】:

我遇到了以下问题: 我从 .csv 文件中读取 WinCC 变量。现在有一个包含 IP 地址的字符串。看起来像这样:I0043CTRL/CALH1$ST$Beh$stVal;Len=4;MMSType=133;Flag=RW

本例中的地址是I0043

现在我想把地址后面的字符串剪掉,但是变量名可能有更多,例如I0043PROT/...

有没有可能告诉例如 getline 在各种标志处结束? 点赞:getline(tmp_stringstream,tmp_string, 'C' || 'P');

谢谢

帕特里克

【问题讨论】:

  • Boost 有boost::split,它可以完全满足您的需求。据我所知,标准库没有这个功能,如果不能使用boost,就得自己实现了。
  • 总是前 5 个字符吗?此外,std::string::find_first_of 将搜索字符串,直到找到与指定字符匹配的任何字符。
  • @PeterWood 不,不幸的是它并不总是这样,这就是为什么我更喜欢 us2012 的方法。

标签: c++ string getline


【解决方案1】:

boost::split 满足您的需求:http://www.boost.org/doc/libs/1_53_0/doc/html/string_algo/usage.html#idp163440592

std::string mystring("asd,ff.erw qewr");
std::vector<std::string> tokens;
boost::split( tokens, mystring, boost::is_any_of(",.-/ ") );

【讨论】:

  • 完美,这正是我想要的。非常感谢。
  • @Patrick 如果有帮助,请考虑接受:meta.stackexchange.com/questions/5234
  • @Peter 所以? OP是一个新用户,就像那个元线程上接受的答案所说,我确实礼貌地问了。你到底有什么不喜欢的?
  • @us2012 我没有说我不喜欢它。你很有礼貌。
【解决方案2】:

在 C 运行时库中有一个字符串标记器函数,strtok (include )

在 C++ 运行时有一个等效的 std::strtok (include )

【讨论】:

    【解决方案3】:

    你可以使用std::string::find_first_ofstd::string::substr

    string line("I0043CTRL/CALH1$ST$Beh$stVal;Len=4;MMSType=133;Flag=RW");
    
    cout << line.substr(0, line.find_first_of("CP"));
    

    输出:

    I0043
    

    【讨论】:

    • 但是当有其他类型的变量时,我又遇到了问题,例如,它们将被命名为“I0043PROT/...”。还是我错过了什么?
    • 你能给出一系列输入和输出的例子吗?
    • 我不确定我是否理解;我正在做你在问题中所说的。
    • 啊,这是我的错,我没有查找 find_first_of 并认为它仅在所有符号都在字符串中时才有效。我也试试这个版本,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多