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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2014, 14:48   #1
Janitor93
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 13
По умолчанию Символьная строка

Во, нашел ветку где гнобить не должны. В общем, задача такая "Нужно вывести слово, у которого первая и последняя буквы совпадают." Язык С++.
Алгоритм взял вот этот. Код получился такой, только он не работает. А почему? Ошибок никаких нет, просто во время цикла программа зависает. А почему?
Код:
#include <iostream>
#include <string>
using namespace std;
int main()
{
	const int L = 100;
	char str[L];
	cout << "Vvedite stroku: ";
	gets_s(str);
	cout << "Vi vveli: "<<str<<endl;
	int len = strlen(str);
	int i, j = 0, k = 0, g;
	for (i = 0; i < len; i++)
	{
		k++;								//всего символов
		j++;								//символов до пробела
		if (str[i] == ' ')
		{
			g = k - (j - 1);					//позиция начала слова
			if (str[g] == str[k - 1])				//если совпадает, то выводим
			{
				for (i = str[g]; i < str[k]; i++)	
					cout << "Slovo: "<< str[i];
			}
			cout << endl;
		}
		i++;
	}

	system("pause");
	return 0;
}
Janitor93 вне форума Ответить с цитированием
Старый 25.09.2014, 15:02   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Код получился такой, только он не работает. А почему?
А потому, что
Цитата:
Алгоритм взял
А надо было сделать свой.

Ладно, ближе к телу. IDE какая у тебя? DevC++?
Прогонял под отладчиком, смотрел, что в памяти с переменными происходит?

Не нравится мне вот этот кусок:
Код:
for (i = str[g]; i < str[k]; i++) // <--- переведи на русский условие под for 
  cout << "Slovo: "<< str[i];
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.09.2014, 15:38   #3
Janitor93
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 13
По умолчанию

Использую visual studio 2013.
Вот кажется одна ошибка, j после if не обнуляется же.
А цикл присваивает i номер элемента с которого начинается слово, и от него идет до конца строки.
Janitor93 вне форума Ответить с цитированием
Старый 25.09.2014, 15:41   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

В любом случае - дебаггер в зубы и вперёд.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.09.2014, 11:54   #5
Janitor93
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 13
По умолчанию

короче я так понимаю оно вообще в цикл не заходит.
Janitor93 вне форума Ответить с цитированием
Старый 27.09.2014, 11:58   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
короче я так понимаю оно вообще в цикл не заходит.
Дебаггером это выясняется за 2 секунды, а ты двое суток мозг сношаешь делаешь предположения.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 27.09.2014, 12:01   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Может стоит взять алгоритм попроще?
Например этот: http://www.programmersforum.ru/showthread.php?t=121545
Или этот: http://www.programmersforum.ru/showthread.php?t=214478
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.10.2014, 12:16   #8
Janitor93
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 13
По умолчанию

Бампаю тему.
Вот рабочий код:

Код:
#include <iostream>
#include <string>
using namespace std;
int main()
{
	const int L = 100;
	char str[L];
	cout << "Vvedite stroku: ";
	gets_s(str);
	cout << "Vi vveli: "<<str<<endl;
	int len = strlen(str);
	int i, j = 0, end, k = 0, g;
	for (i = 0; i < len; i++)
	{
		k++;
		j++;
		if (str[i] == ' ' || i == len - 1)
		{
			g = k - (j - 1);
			if (i == len - 1) 
				k++;
			
			if (str[g - 1] == str[k - 2] && str[g - 1] != ' ')
			{
				cout << "Slovo: ";
				for (int a = g - 1; a <= k - 2; a++)
					cout << str[a];
				cout << endl;
			}
			j = 0;
		}
	} 

	system("pause");
	return 0;
}
как сделать, что если 2 слова одинаковые, например ввожу: text text, то в результате оно выводило без повторений, просто один раз text ?
Janitor93 вне форума Ответить с цитированием
Старый 05.10.2014, 13:32   #9
Janitor93
Пользователь
 
Регистрация: 23.01.2014
Сообщений: 13
По умолчанию

бамапаю 3 раза.

1 бамп.
Janitor93 вне форума Ответить с цитированием
Старый 05.10.2014, 16:37   #10
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,609
По умолчанию

Сохранять в массив позицию начала и конца каждого подобного слова.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дана символьная строка Mahauri Huseyn Помощь студентам 2 10.04.2014 16:15
Символьная строка Winsic Общие вопросы C/C++ 4 14.05.2012 09:02
символьная строка venel Помощь студентам 1 27.02.2012 00:50
символьная строка l0lo Общие вопросы C/C++ 4 24.12.2011 23:30
Символьная строка.(язык C) Иван_Секретарев Помощь студентам 0 18.12.2009 23:07