Массив c ++ split и foreach

0

как я могу разделить (с,) строку и сопоставить каждый элемент? Я использую gcc версии 4.6.3 на Ubuntu.

Мой "псевдокод":

#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";
       }
   }
}

спасибо

  • 0
    @Mgetz этот вопрос спрашивает о разбиении строк по пробелам.
  • 0
    @TimSeguine прокрутите вниз до второго ответа
Показать ещё 8 комментариев
Теги:
string
arrays

1 ответ

-5

Например

#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::string и std::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<std::string> для их хранения.

  • 1
    это может быть значительно улучшено, скажем, включив ответ C ++, который в основном не является C, который был поточно-безопасным, так как strtok определенно не
  • 0
    @Mgetz Я уверен, что он не интересен в темах.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню