Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i) / 12 сообщений из 12, страница 1 из 1
23.03.2004, 08:44
    #32452304
Demidov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
Кто как бы сделал GetWord(AnsiString, i) - функцию получения i-го слова из строки? Странно, что нет такого метода.
...
Рейтинг: 0 / 0
23.03.2004, 09:00
    #32452319
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
Чтож тут сложного?
Находишь i-1-ый и i-тый пробелы и между ними вырезаешь слово...
...
Рейтинг: 0 / 0
23.03.2004, 10:02
    #32452429
Demidov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
Может лучше AnsiString.IsDelimiter(), ведь не только пробел м.б. между словами?
...
Рейтинг: 0 / 0
23.03.2004, 10:37
    #32452547
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
авторНаходишь i-1-ый и i-тый пробелы и между ними вырезаешь слово...
Ну-ну, а если между словами два пробела? И второй вопрс - тире, которое должно с двух сторон обрамляться пробелами, за слово считать?
...
Рейтинг: 0 / 0
23.03.2004, 10:50
    #32452584
Cauchy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
Да, вы правы. Это на первый взгляд кажется просто...

Ко всему сказанному могу еще добавить, что запятые, двоеточия и т. д. тоже не должны входить в слово. К тому же, часто, когда после слова стоит знак препинания, пробел не пишут.
...
Рейтинг: 0 / 0
23.03.2004, 10:53
    #32452589
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
позиция нумеруется с 0.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
while (*str==' ' || *str=='\b' )
	str++;

while (i)
{
	if(!*str)
	{
		i= 0 ;
		continue;
	}

	if(*str==' ' || *str=='\b')
	{
		while (*str==' ' || *str=='\b' )
			str++;
		i --;
 
	}
	else
		str++;
}
pstr = str;
while (*pstr!=' ' && *pstr!='\b' && *pstr)
	pstr++;
*pstr= 0 ;
...
Рейтинг: 0 / 0
23.03.2004, 10:53
    #32452590
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
авторстоит знак препинания, пробел не пишут.
К слову: его пишут после знака препинаниия.
Но задача непроста, до тех пор, пока не будут сформулировано четкое определение, что считается словом. Запрограммировать - дело техники.
...
Рейтинг: 0 / 0
23.03.2004, 11:00
    #32452604
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
вырезалка (идёт сразу за выбиралкой)

Код: plaintext
1.
2.
3.
4.
char prep[ 16 ] =  ",.:;?!\" ";

for(i= 0 ; i<strlen(prep);i++)
	while( strchr(str,prep[i]) )
		strcpy(strchr(str,prep[i]),strchr(str,prep[i])+ 1 );
...
Рейтинг: 0 / 0
23.03.2004, 11:05
    #32452617
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
а тире и отдельно стоящие знаки препинания можно "пропустить" в выбиралке

Код: plaintext
1.
2.
...
if(*str==' ' || *str=='\b' || *str=='-' || *str==',' || ..... )
...

ну и во всех местах с проверкой...

Тогда, вобщем-то, и вырезалку не надо :)
Никто же не станет внутрь слова запятые впихивать? :) (в данном случае запятая, или любой знак внутри слова будет делить его "попо!лам = попо лам")
...
Рейтинг: 0 / 0
23.03.2004, 11:47
    #32452742
Tracer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
Есть же стандартная функция strtok

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
char* getWord( char* str, int index )
{
    char* ptr = str;
    char   seps[]   =  " ,\t\n.;:" ;
    do
    {
         ptr = strtok( ptr, seps );
         index --;
 
    }while( ptr != NULL && index >=  0  );

    return ptr;
}
...
Рейтинг: 0 / 0
23.03.2004, 12:29
    #32452841
Demidov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
Да, strtok, наверное, лучше ...
...
Рейтинг: 0 / 0
23.03.2004, 12:29
    #32452842
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i)
Эх, не знал, не знал :)

Но немного подправлю.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
char* getWord( char* str, int index )
{
    char* ptr = str;
    char   seps[]   =  " ,\t\n.;:" ;
    ptr = strtok( str, seps );
    while(index -- && (ptr = strtok(NULL, seps)));
 
    return ptr;
}
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Типа конкурс ... Кто как бы сделал GetWord(AnsiString, i) / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]