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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2013, 21:02   #1
Irna
 
Регистрация: 26.11.2013
Сообщений: 3
По умолчанию Помогите с задачей на массивы (С++)

Здравствуйте!
Помогите начинающей студентке, пожалуйста!

Есть задача:
Задан массив строк char Name[][20] = {"Строка1", "Строка2", "Строка3", "Строка4", "Строка5"}
Программа должна определять, содержится ли в этом массиве строка, дополнительно введенная пользователем.

То, что у меня получилось, работает некорректно. Если пользователь ввел что угодно, начинающееся со слова "Строка", например, "Строка80", "Строкааа" - пишется "строка есть в массиве". Что не так?


Код:
int main ()
{SetConsoleOutputCP(1251);
    const int MAXNAME = 20;
	char Name[][MAXNAME]={"Строка1", "Строка2", "Строка3", "Строка4", "Строка5", "Строка6"}; 
	char Str [MAXNAME]; // для строки, введенной пользователем
	int f; // флажок, показывающий, было ли совпадение строк
	int k = 6; // количество строк
	int j; // переменная для цикла

	while(1)
	{ cout << "Введите строку.\n Для откажа нажмите =\n";
	  cin.getline (Str, MAXNAME);
	  if (strcmp (Str, "=")==0)
		  exit(0);


	  for (int i=0; i<k; i++)
		{f=1;
		for (j=0; Str[j]!='\0'; j++); 
		if (Str[j]!=Name[i][j]) 

			f=0;
			break;
	    }
	 

	  if(f==1)
		     cout << "Эта строка есть в массиве\n";
	  if(f==0)
			cout << "Этой строки нет в массиве\n";	
		
	}

		_getch();
}
Irna вне форума Ответить с цитированием
Старый 26.11.2013, 21:11   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Ваш break он к какому for относится? Судя по коду - к for (int i=0 ....

Последний раз редактировалось type_Oleg; 26.11.2013 в 21:13.
type_Oleg вне форума Ответить с цитированием
Старый 26.11.2013, 21:15   #3
Irna
 
Регистрация: 26.11.2013
Сообщений: 3
По умолчанию

Поняла жуткую вещь.
У меня программа считает только количество символов во введенной строке. И если оно меньше того, что было в массиве, выдает несовпадение. А как мне именно и конкретно символы сравнить?

Последний раз редактировалось Irna; 26.11.2013 в 22:53.
Irna вне форума Ответить с цитированием
Старый 27.11.2013, 00:01   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А почему ты не используешь strcmp для сравнения? )
Son Of Pain вне форума Ответить с цитированием
Старый 27.11.2013, 19:13   #5
Irna
 
Регистрация: 26.11.2013
Сообщений: 3
По умолчанию

Да вот до меня уже дошло про strcmp. Но я не знаю, как сравнить с ее помощью элемент двухмерного массива.

Код:
for (int i=0; i<k; i++)
		{f=1;
		for (j=0; Str[j]!='\0'; j++);
{if (strcmp (Str, Name[][j])==0) 
f=0;
Вот в єтом месте: Name[][j] явно должно біть что-то другое, чтобі сравнивать строку пользователя с каждой строкой массива, но я не знаю, что...
Irna вне форума Ответить с цитированием
Старый 28.11.2013, 02:23   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

А зачем тебе второй цикл?
Просто
Код:
for (int i = 0; i < k; i++)
	if (strcmp(Str, Name[i])==0)
Son Of Pain вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с задачей на массивы (язык Си) Tarcom Помощь студентам 1 13.10.2013 18:41
Помогите с задачей на массивы в С++ Veina Помощь студентам 4 29.11.2009 11:32
помогите плз с задачей на массивы sp.caster Помощь студентам 6 04.02.2009 20:10
помогите с задачей на 2хмерные массивы eHappy Паскаль, Turbo Pascal, PascalABC.NET 0 14.12.2008 11:27