【问题标题】:c++ split and foreach array [duplicate]c ++拆分和foreach数组[重复]
【发布时间】:2015-01-09 20:36:18
【问题描述】:

如何拆分(使用 ,)字符串并匹配每个元素? 我在 Ubuntu 上使用 gcc 版本 4.6.3。

我的“伪代码”:

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;

int main () {
    char str[] = "foo,bar";
    char * pch;
    pch = strtok (str,",");

    for (int i = 0; i < str.size(); ++i) {
       if( pch[i] == "something" ) {
          cout << pch[i] << "\r\n";
       }
   }
}

谢谢

【问题讨论】:

  • @Mgetz 该问题询问有关按空格分割字符串的问题。
  • @TimSeguine 向下滚动到第二个答案
  • @Mgetz 我知道,我读过。但据我了解,如果 question 重复,而不是答案适用,则问题是重复的。
  • 为什么你的问题标题有“foreach array”字样?我不明白这与您在帖子中提出的问题有何关系。
  • @TimSeguine 问题是如何在 C++ 中拆分字符串,分隔符最终应该是无关紧要的。

标签: c++ arrays string


【解决方案1】:

例如

#include <iostream>
#include <cstring>

int main() 
{
    char str[] = "foo,something,bar";

    char *p = std::strtok( str, "," );
    while ( p )
    {
        if ( std::strcmp( p, "something" ) == 0 ) std::cout << p << std::endl;
        p = std::strtok( NULL, "," );
    }

    return 0;
}

输出是:)

something

另一种方法是使用类std::stringstd::istringstream。例如

#include <iostream>
#include <sstream>

int main() 
{
    char str[] = "foo,something,bar";
    std::istringstream is( str );
    std::string word;

    while ( std::getline( is, word, ',' ) )
    {
        if ( word == "something" ) std::cout << word << std::endl;
    }

    return 0;
}

输出将与上面相同。

如果您需要存储单独的单词,那么您可以使用std::vector&lt;std::string&gt; 类来存储它们。

【讨论】:

  • 这可以通过说包括一个 C++ 而不是主要是 C 的答案来大幅改善,因为strtok 绝对不是线程安全的
  • @Mgetz 我敢肯定他对线程不感兴趣。
  • 我绝对不会做出这样的假设,作为开发人员,您最不想做的就是稍后发现您的代码不是线程安全的。
  • strtok 应该用火杀死 IMO
  • strtok 应该被火烧死。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 1970-01-01
相关资源
最近更新 更多