Если вы действительно хотите использовать переключатель, вы можете использовать сопоставление с образцом в случае переключателя
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;
}
С этим дистрибутивом 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"));
}
это работает приятно на меня :), это вставляет результаты 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;
}
Можно использовать функцию 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";
}
}
Попытайтесь использовать stringstream:
std::string line("A line of tokens");
std::stringstream lineStream(line);
std::string token;
while(lineStream >> token)
{
}
Проверьте мой ответ на свой последний вопрос:
C++ Читая Маркеры файла
Это зависит от того, насколько сложный маркерный разделитель и если существует больше чем один. Для легких проблем просто используйте станд.:: istringstream и станд.:: getline. Для более сложных задач или если Вы хотите выполнить итерации маркеров совместимым STL способом, используйте Токенизатор Повышения. Другая возможность (хотя более грязный, чем любой из этих двух) состоит в том, чтобы настроить некоторое время цикл, который называет станд.:: строка:: найдите и обновляет положение последнего найденного маркера, чтобы быть стартовой точкой для поиска следующего. Но это является, вероятно, самым склонным к ошибке из этих 3 опций.
См. также повышение:: разделение из библиотеки 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" }