Вход на сайт
нужен совет в имплементировании
205
NEW 03.06.06 14:48
Привет.
Я пишу программу в Висуал Ц++
У меня есть Стринг "слово1;слово;слово3" и индех может принимать значение 0 или 1. И в зависимости от
значения
я должен получить слово1 или слово2
Поскольку я склонен к усложнениям прошу совета как можно это сделать
наиболее оптимально
мне пришло в голову следующее
CString str="слово1;слово;слово3";
CString strWord;
lIndex=1;
long lPosition=0;
for(long i=0;i<=lIndex;i++)
{
lPosition=str.Find(_T(";"),i);
strWord=str.Left(lPosition);
str=str.Mid(lPosition+1,str.GetLength());
}
Я пишу программу в Висуал Ц++
У меня есть Стринг "слово1;слово;слово3" и индех может принимать значение 0 или 1. И в зависимости от
значения
я должен получить слово1 или слово2
Поскольку я склонен к усложнениям прошу совета как можно это сделать
наиболее оптимально
мне пришло в голову следующее
CString str="слово1;слово;слово3";
CString strWord;
lIndex=1;
long lPosition=0;
for(long i=0;i<=lIndex;i++)
{
lPosition=str.Find(_T(";"),i);
strWord=str.Left(lPosition);
str=str.Mid(lPosition+1,str.GetLength());
}
стойте там и слушайте сюда, именно отсюда будет проистекать
NEW 03.06.06 16:50
1. Пиши на С++ а не на С.
2. Изучи stl и забудь про CString.
Как в векторе получить элемент по индексу сам найдёшь?
2. Изучи stl и забудь про CString.
В ответ на:
#include <iterator>
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
void tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ")
{
string::size_type lastPos = str.find_first_not_of(delimiters, 0);
string::size_type pos = str.find_first_of(delimiters, lastPos);
while( string::npos!=pos || string::npos!=lastPos )
{
tokens.push_back(str.substr(lastPos, pos - lastPos));
lastPos = str.find_first_not_of(delimiters, pos);
pos = str.find_first_of(delimiters, lastPos);
}
}
int main(int argc, char** argv)
{
vector<string> tokens;
string str("Word1;Word2;Word3");
tokenize(str, tokens, ";");
copy(tokens.begin(), tokens.end(), ostream_iterator<string>(cout, ", "));
return 0;
}
Как в векторе получить элемент по индексу сам найдёшь?

Dropbox - средство синхронизации и бэкапа файлов.
03.06.06 17:59
в ответ krys 03.06.06 17:30
> ну а как выход из ситуации на данный момемт это приемлемо?
Думаю, нет, если ты совсем не понял, что я написал.
А написал я тебе функцию, которая разбивает строку на токены используя разделители и пример, как ею пользоваться. Ты спрашивал как оптимально сделать?
Думаю, нет, если ты совсем не понял, что я написал.

Dropbox - средство синхронизации и бэкапа файлов.
NEW 03.06.06 22:13
в ответ voxel3d 03.06.06 16:50
Дустом его, дустом! Пардон, бустом...

В ответ на:
#include <string>
#include <iostream>
#include <iterator>
#include <algorithm>
#include <boost/tokenizer.hpp>
using namespace std;
using namespace boost;
int main()
{
string s( "token1;token2;token3" );
tokenizer< char_separator<char> > tok( s, char_separator<char>(";") );
copy( tok.begin(), tok.end(), ostream_iterator< string >( cout, "\n" ) );
}