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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2013, 21:03   #1
artemjev
 
Регистрация: 01.04.2013
Сообщений: 4
Сообщение Программа на C - поиск слова

Всем привет! Не работает программа, которая должна по введенному тексту искать слово, и выводить его количество, вот мой код:
Код:
#include "stdio.h"
#include "string.h"

#define MAXEL 100

void  getwrd( char ** str0 );
void  getexmpl( char ** str1 );
int search( char * str0, char * str1 );

int main( void ) {
	char * str0 = "my name is artem", * str1 = "artem";
	getwrd( &str0 );
	getexmpl( &str1 );
	printf( "Ctroka vstrchaetsya: %d raz", search( str0, str1 ) );
	getchar();
	return 0;
}

void getwrd( char ** str0 ) {
	int i;
	*str0 = ( char *) calloc(  sizeof( char ) ,  MAXEL );
	for(i = 0; i < MAXEL;i++)
		*(*str0 + i) = 0;
	for ( i = 0; i <  MAXEL && ( *( (*str0) + i ) = getchar() ) != EOF && *( *str0 + i ) != '\n'; ++i)
		;
}

void  getexmpl( char ** str1 ) {
	int i;
	*str1 = ( char *) calloc( sizeof( char ),  MAXEL );
	for(i = 0; i < MAXEL;i++)
		*(*str1 + i) = 0;
	for ( i = 0; i <  MAXEL && ( *( *str1 + i )= getchar() ) != EOF && *( *str1 + i ) != '\n'; ++i)
		;
}
/*------------------------------------------------------------------------------------------------*/
int search( char * str0, char * str1 ) {  //Собсна, в этой функции и вся 
	char * str_p = str0;                  // проблема, ибо криворукая рекурсия
	int i = 0;
	short sc = 0;
	str_p = strstr( str_p, str1);
	if ( str_p ) {
		sc = 1;
		i++; 
		search( str_p, str1 );
	}
	if (sc)
		return i;
	return 0;
}
Не подскажите, как исправить?
P.S. Ошибка - Segfault

Последний раз редактировалось artemjev; 01.04.2013 в 21:31.
artemjev вне форума Ответить с цитированием
Старый 01.04.2013, 22:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Стесняюсь спросить, а собсно рекурсия тут к чему?
По-моему в цикле strstr() зарядить и порядок.
http://www.programmersforum.ru/showthread.php?t=100361
не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2013, 15:02   #3
artemjev
 
Регистрация: 01.04.2013
Сообщений: 4
По умолчанию

хех... исправил, но теперь после ввода двух строк нет вообще ничего:
Код:
int search( char * str0, char * str1 ) {
	char * str_p = 0;
	int i = 0;
	str_p = strstr( str0, str1);
	if ( str_p ) {
		++i;
		while ( strstr( str_p, str1) ) {
			str_p = strstr( str_p, str1);
			++i;
		}
		return i;
	}
	return 0;
}
Такое чувство, что-то не так в strstr, она возвращает указатель на первое вхождение?

Последний раз редактировалось artemjev; 02.04.2013 в 15:07.
artemjev вне форума Ответить с цитированием
Старый 02.04.2013, 15:16   #4
artemjev
 
Регистрация: 01.04.2013
Сообщений: 4
Сообщение

Вообще какая-то мистика с strstr, ибо если в тексте есть слово, но при этом после этого слова стоят какие-то левые буквы, то функция возвращает ноль:
Без имени.png
artemjev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск слова в строке и редактирование этого слова Wasili4 Microsoft Office Excel 3 22.06.2011 21:06
Поиск слова G-58 Visual C++ 2 18.05.2011 23:14
Разбить текст на слова и произвести поиск каждого слова по текстовому массиву Burning_brook Microsoft Office Excel 2 22.05.2010 01:56
Поиск слова Chartvit Общие вопросы C/C++ 2 08.12.2009 21:57
Поиск 'Слова' JakSon Работа с сетью в Delphi 1 20.04.2008 00:13