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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 00:30   #1
STIFFmaster_LP
Пользователь
 
Аватар для STIFFmaster_LP
 
Регистрация: 24.10.2009
Сообщений: 24
По умолчанию Нужно найти ошибку в программе (С++)

Помогите найти ошибку. Программа должна искать количество вхождений подстроки в строку, а вместо нужного числа всегда выводит только 0
Код:
#include <iostream.h>
void main()
{
	char stroka[30];
	char podstroka[6];
	int ch=0;
	cout<<"vvedite stroky ";
	cin.getline(stroka, 30);
	cout<<"\nvvedite iskomyjy podstroky ";
	cin.getline(podstroka,6);
	for(int i=0; i<25; i++)
	  {    
		   if ((stroka[i]==podstroka[0]) 
		   && (stroka[i+1]==podstroka[1]) 
		   && (stroka[i+2]==podstroka[2]) 
		   && (stroka[i+3]==podstroka[3])
		   && (stroka[i+4]==podstroka[4])
		   && (stroka[i+5]==podstroka[5]) )
		   ch++;
		   }
		   
	cout<<ch;
}

Последний раз редактировалось STIFFmaster_LP; 23.01.2010 в 17:40.
STIFFmaster_LP вне форума Ответить с цитированием
Старый 23.01.2010, 14:36   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Простите, я не очень люблю читать нотации вместо того, чтобы дать конкретный совет, которого ждёт человек, но... Вам говорили на лекциях, что одно из требований, которому должен удовлетворять любой алгоритм, - универсальность? Если у Вас в подстроке окажется 25 символов, Вы безропотно сцепите в if-e 25 условий?
Vago вне форума Ответить с цитированием
Старый 23.01.2010, 15:07   #3
STIFFmaster_LP
Пользователь
 
Аватар для STIFFmaster_LP
 
Регистрация: 24.10.2009
Сообщений: 24
По умолчанию

у нас препод дибил. все что я знаю я сам прочитал. он только требует лабораторные и все.
STIFFmaster_LP вне форума Ответить с цитированием
Старый 23.01.2010, 15:40   #4
Bearw08
Boom-boom)
Форумчанин
 
Аватар для Bearw08
 
Регистрация: 02.02.2009
Сообщений: 500
По умолчанию

Цитата:
у нас препод дибил. все что я знаю я сам прочитал. он только требует лабораторные и все.
Ну тогда Вам сюда!
¡ʁɔvʎнdǝʚǝdǝu dиw
Bearw08 вне форума Ответить с цитированием
Старый 23.01.2010, 16:06   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Рано ему туда. Он алгоритм составить не может...
...
Один из вариантов выглядит примерно так. Вводим булеву переменную, которая будет равна TRUE, ежели подстрока нашлась и FALSE - если нет. Полагаем её для начала равной TRUE и начинаем перебирать (перебираем от 0 до длина_подстроки-1 включительно) символы подстроки, сравнивая их попарно с соотв. символами основной строки, начиная со stroka[0]. Если нашли несовпадение - сбрасываем этот флажок (булеву переменную) в FALSE и выходим из цикла. Если же символы совпадают - переходим к следующей паре. На выходе из цикла проверяем флажок.

Это мы проверили, не совпадает ли с подстрокой последовательность основной строки, начинающаяся с символа с индексом [0]. Чтобы подсчитать количество вхождений, повторяем всё, что написано в предыдущем абзаце, для символов основной строки, начинающихся с индекса [1], потом - с индекса [2] и т.д., всего (длина_строки - длина_подстроки+1) раз.(подразумевается, что длина_подстроки <= длина_строки).

Советую про C/C++ на пару часов забыть и нарисовать блок-схему.
Vago вне форума Ответить с цитированием
Старый 23.01.2010, 17:21   #6
lamak
C++
Пользователь
 
Регистрация: 31.10.2009
Сообщений: 30
По умолчанию

Используй strcmp() или strstr() описанные в заголовочном файле string.h
Верю в google...

Последний раз редактировалось lamak; 23.01.2010 в 17:26.
lamak вне форума Ответить с цитированием
Старый 23.01.2010, 17:31   #7
STIFFmaster_LP
Пользователь
 
Аватар для STIFFmaster_LP
 
Регистрация: 24.10.2009
Сообщений: 24
По умолчанию

препод запретил такие функции использовать. сказал сделать все циклами и условиями
STIFFmaster_LP вне форума Ответить с цитированием
Старый 23.01.2010, 17:37   #8
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

STIFFmaster_LP скажите, у вас строки какой длинны должны быть? Сколько символов? Могут ли строки быть меньше этой длинны?
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 23.01.2010, 22:31   #9
STIFFmaster_LP
Пользователь
 
Аватар для STIFFmaster_LP
 
Регистрация: 24.10.2009
Сообщений: 24
По умолчанию

ну да. длина строк не важна. важно чтоб программа работала
STIFFmaster_LP вне форума Ответить с цитированием
Старый 23.01.2010, 23:26   #10
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

попробуйте такой код:

Код:
	int ch = 0;

	bool en=false;
	int i = 0;
	while (!en)
	{
		int j = 0;
		bool DifFound = false;
		while ((podstroka[j]!=0)&&(stroka[i+j]!=0)&&(!DifFound))
		{
			if (stroka[i+j]!=podstroka[j]) { DifFound = true; }
			j++;
		}
		if (podstroka[j]!=0) { DifFound = true; }
		if (stroka[i+j]==0)
		{ en = true; }
		if (!DifFound) { ch++; }
		i++;
	}
должен работать с нуль терминантными строками любой длины.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 24.01.2010 в 00:01.
val_nnm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку в программе lioshenka Общие вопросы C/C++ 5 24.08.2009 11:38
Не могу найти ошибку в программе Dawystrik Общие вопросы Delphi 9 19.03.2009 21:19
Очень нужна помощь! Нужно найти ошибку в очень простой программе. Lex55555777 Помощь студентам 3 07.12.2008 20:32
помогите на найти ошибку в программе SYL@R Помощь студентам 1 28.11.2008 12:35
Помогите найти ошибку в программе KnDmPetr Паскаль, Turbo Pascal, PascalABC.NET 5 10.03.2008 14:19