Разделение строк в C++ [дубликат]

Если вы действительно хотите использовать переключатель, вы можете использовать сопоставление с образцом в случае переключателя

PS: для C # 7.0 или выше

switch(e.ColumnIndex)
{
    case var _ when (dataGridView.Columns["First"].Index == e.ColumnIndex):
        break;
    case var _ when (dataGridView.Columns["Second"].Index == e.ColumnIndex):
        break;
    case var _ when (dataGridView.Columns["Third"].Index == e.ColumnIndex):
        break;
}
8
задан Qix 27 April 2017 в 03:29
поделиться

6 ответов

С этим дистрибутивом Mingw, который включает Повышение:

#include <iostream>
#include <string>
#include <vector>
#include <iterator>
#include <ostream>
#include <algorithm>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;

int main() {
    vector<string> v;
    split(v, "1=2&3=4&5=6", is_any_of("=&"));
    copy(v.begin(), v.end(), ostream_iterator<string>(cout, "\n"));
}
5
ответ дан 5 December 2019 в 05:35
поделиться

это работает приятно на меня :), это вставляет результаты elems. delim может быть любой char.

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) {
    std::stringstream ss(s);
    std::string item;
    while(std::getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}
14
ответ дан 5 December 2019 в 05:35
поделиться

Можно использовать функцию C strtok:

/* strtok example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");
  while (pch != NULL)
  {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;
}

Токенизатор Повышения также сделает задание:

#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>

int main(){
   using namespace std;
   using namespace boost;
   string s = "This is,  a test";
   tokenizer<> tok(s);
   for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
       cout << *beg << "\n";
   }
}
4
ответ дан 5 December 2019 в 05:35
поделиться

Попытайтесь использовать stringstream:

std::string   line("A line of tokens");
std::stringstream lineStream(line);

std::string token;
while(lineStream >> token)
{
}

Проверьте мой ответ на свой последний вопрос:
C++ Читая Маркеры файла

3
ответ дан 5 December 2019 в 05:35
поделиться

Это зависит от того, насколько сложный маркерный разделитель и если существует больше чем один. Для легких проблем просто используйте станд.:: istringstream и станд.:: getline. Для более сложных задач или если Вы хотите выполнить итерации маркеров совместимым STL способом, используйте Токенизатор Повышения. Другая возможность (хотя более грязный, чем любой из этих двух) состоит в том, чтобы настроить некоторое время цикл, который называет станд.:: строка:: найдите и обновляет положение последнего найденного маркера, чтобы быть стартовой точкой для поиска следующего. Но это является, вероятно, самым склонным к ошибке из этих 3 опций.

1
ответ дан 5 December 2019 в 05:35
поделиться

См. также повышение:: разделение из библиотеки String Algo

string str1("hello abc-*-ABC-*-aBc goodbye");
vector<string> tokens;
boost::split(tokens, str1, boost::is_any_of("-*")); 
// tokens == { "hello abc","ABC","aBc goodbye" }

3
ответ дан 5 December 2019 в 05:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: