Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.09.2009, 16:44   #1
GonZaleZ
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 57
По умолчанию Анализ текста

Подскажите пожалуйста, существует ли такая функция для онализа текста в строке? Например, мне нужно определить, есть ли в строке какие либо слова:
Код:
...
char str[10000];
cin.getline(str, 10000);
if (тут надо определить наличие определённых слов в строке) {...};
...
Заранее спасибо большое. Знаю, что не откажете)$

Последний раз редактировалось GonZaleZ; 16.09.2009 в 16:46.
GonZaleZ вне форума Ответить с цитированием
Старый 16.09.2009, 16:53   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
if(strstr(str,"hello")) 
 cout<<"!!!";
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.09.2009, 16:59   #3
GonZaleZ
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 57
По умолчанию

Спасибо огромное)) сейчас попробую)
а надо ли какую-нибудь дополнительную библиотеу подключать?
GonZaleZ вне форума Ответить с цитированием
Старый 16.09.2009, 17:06   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

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

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 16.09.2009, 20:09   #5
GonZaleZ
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 57
По умолчанию

спасибо))
а возможно ли сделать так, чтобы он проверял не просто набор символов, а именно отдельные слова до пробелов.
т.е. например, я хочу, чтобы условие было верно только если в строке есть слово "привет", а если будет слово "приветики", то условие будет ложным. но сделать это не тупым вбиванием наборов ложных значений в условие, а именно проверкой отдельного слова.
в данном же случае если ввести какой-либо набор символов, то функция проверяет их наличие в самой строке, как именно набор символов. а нужно именно как отдельное слово.
GonZaleZ вне форума Ответить с цитированием
Старый 16.09.2009, 20:14   #6
GonZaleZ
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 57
По умолчанию

часть вопроса отпала. просто ограничил слова пробелами))
но что делать с теми словами, которые могут встретиться в конце?
ведь если их ограничить пробелом только с одной стороны, то если они встретятся в середине и будут началом какого-нибудь другого слова, то слово тоже будет считаться удовлетворяющим условию((
GonZaleZ вне форума Ответить с цитированием
Старый 16.09.2009, 20:46   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Можно, например, проверять значения слева и справа от строки, если разделитель, или ноль, или указатель на начало подстроки равен указателю на начало строки, значит всё верно и это наше конкретное слово =). Как пример:
Код:
#include <iostream>
#include <string.h>

bool isdelim(unsigned char c)
{
	if( isdigit(c) || isalpha(c) )
		return false;

	return true;
}

const char* strinstr(const char* str, const char* substr)
{
	const char* res = strstr(str, substr);
	int substr_len = strlen(substr);

	if(((res == str) || isdelim(res[-1])) && (isdelim(res[substr_len]) || !res[substr_len]))
		return res;

	return 0;
}

int main()
{
	const char* str = "Яблоко -великая вещь! Ещё древний философ Цицерон...";
	const char* substr = "Цицерон...";
	const char* substr2 = "великая";
	const char* substr3 = "лик"; // часть слова "великая"

	setlocale(LC_ALL, "Russian");
	const char* res = strinstr(str, substr);

	if(res != 0)
		std::cout << res << std::endl;
	else
		std::cout << "Нету." << std::endl;

	res = strinstr(str, substr2);
	if(res != 0)
		std::cout << res << std::endl;
	else
		std::cout << "Нету." << std::endl;

	res = strinstr(str, substr3);
	if(res != 0)
		std::cout << res << std::endl;
	else
		std::cout << "Нету." << std::endl;

	return 0;
}
В моём случае цифры подразумеваются как часть слова)
netrino вне форума Ответить с цитированием
Старый 16.09.2009, 21:10   #8
GonZaleZ
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 57
По умолчанию

тоже вариант, но слишком заморочено... просто есть фрагмент программы - что-то типа мини-бота, который если найдёт в тексте определённые слова и фразы, отвечает другими заранее заданными ответами. но ведь не прописывать это к каждой отдельной фразе...
уверен, должно быть более изящное решение
GonZaleZ вне форума Ответить с цитированием
Старый 16.09.2009, 21:46   #9
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

strtok еще есть для выделения слов в строке
pu4koff вне форума Ответить с цитированием
Старый 16.09.2009, 22:15   #10
GonZaleZ
Пользователь
 
Регистрация: 19.06.2009
Сообщений: 57
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
strtok еще есть для выделения слов в строке
а как ей пользоваться и зачем выделять?
GonZaleZ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
АВС-анализ. abdumanon Microsoft Office Excel 8 14.09.2010 08:32
Анализ текста Neymexa Помощь студентам 10 13.01.2009 18:44
анализ и преобразование текста строки Черная тень Паскаль, Turbo Pascal, PascalABC.NET 6 10.01.2009 17:33
Анализ словосочетаний. PUH Помощь студентам 19 11.06.2008 01:53