Здравствуйте, Olegator, Вы писали:
O>Есть задача: разобрать произвольную строку символов так, чтобы в результате получился массив, содержащий слова этой строки по отдельности.
O>Как реализовать эту задачу в виде функции на C++?
Предположим, 'строка' — это класс, называющийся String, который умеет:
— инициализировать себя char* (конструктор и оператор присваивания)
— присоединять к себе символы и char* посредством оператора +=
— возвращать свою длину (метод length() )
— приводить себя к const char* (оператор const char*)
Здравствуйте, Olegator, Вы писали:
O>Есть задача: разобрать произвольную строку символов так, чтобы в результате получился массив, содержащий слова этой строки по отдельности.
O>Как реализовать эту задачу в виде функции на C++?
Здравствуйте, Olegator, Вы писали:
O>Есть задача: разобрать произвольную строку символов так, чтобы в результате получился массив, содержащий слова этой строки по отдельности.
O>Как реализовать эту задачу в виде функции на C++?
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using std::cout;
using std::endl;
int not_isspace(char c)
{
return !isspace(c);
}
void split(const std::string& s,std::vector<std::string>& vec)
{
using std::string;
using std::vector;
using std::find_if;
if (s.size() == 0) return;
//struct temp
//{
// temp(bool isspace):_b(isspace){}
// int operator()(char c) const
// {
// return isspace(c) ^ !_b;
// }
// bool _b;
//};typedef string::const_iterator str_ci;
//str_ci begin_of_the_word = find_if(s.begin(),s.end(),temp(false));
str_ci begin_of_the_word = find_if(s.begin(),s.end(),not_isspace);
while(begin_of_the_word != s.end()){
//str_ci end_of_the_word = find_if(begin_of_the_word,s.end(),temp(true));
str_ci end_of_the_word = find_if(begin_of_the_word,s.end(),isspace);
vec.push_back(string(begin_of_the_word,end_of_the_word));
//begin_of_the_word = find_if(end_of_the_word,s.end(),temp(false));
begin_of_the_word = find_if(end_of_the_word,s.end(),not_isspace);
}
}
int _tmain()
{
std::vector<std::string> vec;
split("alex rosa dima",vec);
std::copy(vec.begin(),vec.end(),std::ostream_iterator<std::string>(cout," "));
cout << endl;
return 0;
}
Ждем нового стандарта и новых компиляторов, которые будут компилировать закоментированные строки.
A>void
A>SplitString(const char *pszStringToSplit, const char *pszDelimiters, std::vector<String> &vecWords)
A>{
A> String strCurWord("");
A> vecWords.clear();
A> for (;*pszStringToSplit; pszStringToSplit++)
A> {
A> for (const char *pszDelim = pszDelimiters; *pszDelim; pszDelim++)
A> {
A> if (*pszStringToSplit == *pszDelim)
A> {
A> if (strCurWord.length())
A> {
A> vecWords.push_back(strCurWord);
A> strCurWord = "";
A> }
A> }
A> else
A> strCurWord += *pszStringToSplit;
A> }
A> }
if (strCurWord.length())
vecWords.push_back(strCurWord);
A>}
A>
Здравствуйте, Olegator, Вы писали:
O>Есть задача: разобрать произвольную строку символов так, чтобы в результате получился массив, содержащий слова этой строки по отдельности.
O>Как реализовать эту задачу в виде функции на C++?
Здравствуйте, Юнусов Булат, Вы писали:
ЮБ>Здравствуйте, Юнусов Булат, Вы писали:
ЮБ>При желании можно ужать и до одной строки ( кто меньше ) но сей опус только 7.1 и сьест
хъ
А полстрочки можешь?
... << RSDN@Home 1.1 beta 1 >>
Re: Функция разбора строки
От:
Аноним
Дата:
12.09.03 08:51
Оценка:
Здравствуйте, Olegator, Вы писали:
O>Есть задача: разобрать произвольную строку символов так, чтобы в результате получился массив, содержащий слова этой строки по отдельности.
O>Как реализовать эту задачу в виде функции на C++?
Попробуй стандартную функцию С strtok() (хидер string.h) она лексимезирует строку.
char * result;
char temp[10000];
result=strtok(Temp.c_str()," ");
while (result!=NULL)
{
//обрабатываеш слово здесь у меня создается новая строка.
// Дробление строки идет по пробелу
strcat(temp,result);
strcat(temp," ");
result=strtok(NULL," ");
}
return temp;
Здравствуйте, Olegator, Вы писали:
O>Есть задача: разобрать произвольную строку символов так, чтобы в результате получился массив, содержащий слова этой строки по отдельности.
O>Как реализовать эту задачу в виде функции на C++?
Смотрите описание функции strtok (кстати, между словами в предложение может сотоять не только символ пробела, но и например символ табуляции и т.д.)