Login
нужен совет в имплементировании
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:45
in Antwort krys 03.06.06 14:48
Какой именно из Висуал С++ в 7-м и 8-м у стринга есть сплит() вовращающий аррэй из субстрок.
по коду - lIndex - без типа, и что у тебя будет при пустой строке?
по коду - lIndex - без типа, и что у тебя будет при пустой строке?
NEW 03.06.06 16:50
in Antwort krys 03.06.06 14:48, Zuletzt geändert 03.06.06 16:56 (voxel3d)
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 - средство синхронизации и бэкапа файлов.
NEW 03.06.06 17:06
in Antwort Murr 03.06.06 16:45
Visual C++ 6
long lIndex
Если Стринг пустой Find(...) возрасчает -1
в итоге
получаю пустой стринг strWord
long lIndex
Если Стринг пустой Find(...) возрасчает -1
в итоге
получаю пустой стринг strWord
стойте там и слушайте сюда, именно отсюда будет проистекать
NEW 03.06.06 17:30
in Antwort voxel3d 03.06.06 16:50
ну а как выход из ситуации на данный момемт это приемлемо?
стойте там и слушайте сюда, именно отсюда будет проистекать
NEW 03.06.06 17:59
in Antwort krys 03.06.06 17:30
> ну а как выход из ситуации на данный момемт это приемлемо?
Думаю, нет, если ты совсем не понял, что я написал.
А написал я тебе функцию, которая разбивает строку на токены используя разделители и пример, как ею пользоваться. Ты спрашивал как оптимально сделать?
Думаю, нет, если ты совсем не понял, что я написал.

Dropbox - средство синхронизации и бэкапа файлов.
NEW 03.06.06 21:23
in Antwort voxel3d 03.06.06 16:50
> 2. Изучи stl и забудь про CString.
Зачем? В MFC-проекте мне лично удобнее пользоваться CString. Твой код можно так же без проблем реализовать с CString и CStringArray.
Зачем? В MFC-проекте мне лично удобнее пользоваться CString. Твой код можно так же без проблем реализовать с CString и CStringArray.
NEW 03.06.06 22:13
in Antwort 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" ) );
}
04.06.06 10:18
Ладно врать-то, нет у CString такой функции.
in Antwort Murr 03.06.06 16:45
В ответ на:
Какой именно из Висуал С++ в 7-м и 8-м у стринга есть сплит() вовращающий аррэй из субстрок.
Какой именно из Висуал С++ в 7-м и 8-м у стринга есть сплит() вовращающий аррэй из субстрок.
Ладно врать-то, нет у CString такой функции.
NEW 04.06.06 10:20
in Antwort Simple 03.06.06 21:23
Фишка в общем-то в том, что ничего писать и не надо, всё уже есть, как ты видел это одна строчка работающая на любой платформе.
NEW 04.06.06 10:50
in Antwort scorpi_ 04.06.06 10:20, Zuletzt geändert 04.06.06 10:55 (Simple)
Это же внешняя библиотека? Таких можно и для MFC найти море. А о других платформах в данном случае ваще можно не говорить :)
зы Посмотрел, boost уже в стандарт предложили. Беру свои слова назад :)
зы Посмотрел, boost уже в стандарт предложили. Беру свои слова назад :)
NEW 04.06.06 11:34
in Antwort scorpi_ 04.06.06 10:18
NEW 04.06.06 11:36
in Antwort Simple 04.06.06 10:51
NEW 04.06.06 11:56
in Antwort Simple 04.06.06 11:40
NEW 04.06.06 14:02
in Antwort Murr 04.06.06 11:56
А толку-то? ;) И что значит без разницы, если не используется .NET? :-P