Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно посчитать слова 
:(
    Опции темы
Rutti
Дата 8.5.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



считаю количество слов в тексте используя ispunct, isspace и isdigit. Но всё время получаю неправильный результат из-за того что неправильно выставляю условие цикла:
Код

if(icpuct(c) && isspace(c) && isdigit(c))
.
Как правильно выставить условие что бы в тексте отсечь все знаки пунктации, пробелы и цифры и получить одни только слова?
PM MAIL   Вверх
Rififi
Дата 8.5.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 11
Всего: 36



правильно - разбивать на токены (strtok)
PM MAIL   Вверх
Ln78
Дата 9.5.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Цитата(Rutti @  8.5.2008,  21:22 Найти цитируемый пост)


if(icpuct© && isspace© && isdigit©)


Rutti, использование вместо И (&&) операции ИЛИ (||) несколько приблизит к цели  smile 

PM MAIL   Вверх
Rutti
Дата 10.5.2008, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



Ln78
Цитата(Ln78 @  9.5.2008,  14:29 Найти цитируемый пост)
использование вместо И (&&) операции ИЛИ (||) несколько приблизит к цели

Не приблизило.

А strtok не совсем то что нужно.
PM MAIL   Вверх
Ln78
Дата 10.5.2008, 07:54 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 274
Регистрация: 25.11.2006

Репутация: 13
Всего: 15



Rutti, так больше кода приведено не было smile 
А та строчка с условием - явно неправильная. Требовать, чтобы символ одновременно был и пробелом, и цифрой, и ещё чем-то - я таких чудо-символов не знаю 
PM MAIL   Вверх
bronislav
Дата 10.5.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 334
Регистрация: 29.1.2008
Где: Украина::Донецк

Репутация: нет
Всего: 3



Цитата(Rutti @  8.5.2008,  21:22 Найти цитируемый пост)

Код

if(icpuct(c) && isspace(c) && isdigit(c))
    


Мне кажется условия должно быть такое
Код

if(!icpuct(c) && !isspace(c) && !isdigit(c))
    



--------------------
user posted image
иногда проще и быстрей обойти лужу, даже если кажется что она мелкая и путь напрямик короче - ведь она может скрывать открытый люк (с) mes
PM MAIL   Вверх
Droll
Дата 11.5.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 10.11.2004

Репутация: нет
Всего: 3



А почему это strtok не совсем то, что нужно? По-моему, с его помощью замечательно считается количество слов в строке.

PM   Вверх
Rutti
Дата 18.5.2008, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



Droll, потому что условие надо задавать жёстко. Т.е. нет универсальности
PM MAIL   Вверх
almagnit
Дата 18.5.2008, 09:00 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 3.4.2008

Репутация: нет
Всего: 7



Rutti, я когда-то выполнял подобный алгоритм для выполнения задачи поиска введенного слова.

Не мучайся со стандартными функциями, создай свою и помести перечень всех нужных знаков (их не так много)

и проверяй на существование знака, если такой есть значит увеличивай счетчик т.к. слово закончилось.

ЗЫ:
ИМХО нужно думать своей головой, кто-то на форуме сказал, что изобретая велосипеды мы становимся проффесионалами  smile 
PM MAIL ICQ   Вверх
Rutti
Дата 6.6.2008, 13:05 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



Цитата(almagnit @  18.5.2008,  09:00 Найти цитируемый пост)
Не мучайся со стандартными функциями

А что с ними? Почему они, по сути, неправильно работают? Может всё-таки разобраться с причинами на будущее?
PM MAIL   Вверх
JackYF
Дата 6.6.2008, 13:29 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(almagnit @  18.5.2008,  08:00 Найти цитируемый пост)
кто-то на форуме сказал, что изобретая велосипеды мы становимся проффесионалами

Верно. Только после изобретения часто нужно велосипед поместить на полочку и разобраться со стандартными функциями, написанными до тебя. По ним хоть документация есть.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
rrrFer
Дата 6.6.2008, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 1
Всего: 1



а например
for(i=0;!feof(f);fscanf(f,"%s",&s))
    i++;
не пойдет?

PM MAIL WWW ICQ   Вверх
Rutti
Дата 8.6.2008, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 225
Регистрация: 25.7.2004

Репутация: нет
Всего: нет



Цитата(rrrFer @  6.6.2008,  14:38 Найти цитируемый пост)
а напримерfor(i=0;!feof(f);fscanf(f,"%s",&s))    i++;не пойдет?

Думаю, нет.

Всё же хотелось бы разобраться с работой isspace() и ей подобными.
PM MAIL   Вверх
rrrFer
Дата 8.6.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.5.2008
Где: Красноярск

Репутация: 1
Всего: 1



Rutti
Цитата(Rutti @  8.6.2008,  09:31 Найти цитируемый пост)
Всё же хотелось бы разобраться с работой isspace() и ей подобными.

разобраться конечно не плохо...однако, зачем использовать функции, без которых программа будет работать и работать быстрее.
А что с ними разбираться впринципе smile - открываешь справочник и смотришь какие параметры принимает и что возвращает, а если хочешь разобраться как они работают...я думаю, что в каждой из функций: isspace,ispunct,isgraph,isdigit,isuper и т.д. есть массив АСКИ-кодов символов, с которым сравнивается переданный как параметр символ...(просто предположение)
PM MAIL WWW ICQ   Вверх
just_geek
Дата 10.6.2008, 10:14 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 2
Всего: 10



rrrFer
ничего подобного

isdigit выглядит примерно так
Код

int isdigit(int c)
{
if (c>='0' && c<='9')
    return 1;
return 0;
}


естественно она будет не корректно работать с разными языками smile

Это сообщение отредактировал(а) just_geek - 10.6.2008, 10:14
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1279 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.