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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2019, 10:41   #1
niggainsoul
Пользователь
 
Регистрация: 25.03.2019
Сообщений: 10
По умолчанию Ошибка: string subscript out of range

Первая строка входного файла содержит S (принятое сообщение, состоящее из символов 1 и 0). Вторая строка содержит число N (количество следующих сообщений). Следующие N строк содержат эти сообщения. Длины всех сообщений равны.

В первую строку выходного файла нужно вывести число K (количество сообщений, которые отличаются от принятого сообщения S минимальным количеством позиций). Во вторую строку выведите в порядке возрастания К чисел — номера этих сообщений (нумерация начинается с 1).

Пример:
Принимаем:
010101
3
110011
011001
000111

Выводим:
2
2 3

Мой код:
Код:
#include <fstream>
#include <string>
using namespace std;

int main()
{
	string s; // принятое сообщение
	int n; // количество следующих сообщений
	string m; // следующие сообщения
	int min; // мин. кол-во отличных позиций
	int k; // кол-во сообщений, которые отличаются от s мин. кол-вом позиций
	int d[100]; // их номера

	ifstream fin ("INPUT.TXT");

	getline(fin, s); // считываем принятое сообщение
	fin >> n; // считываем n

	min = s.length(); // min присваиваем длину строки
		
	for (int i = 1; i <= n; i++)
	{
		getline(fin, m); // считываем сообщение
		
		int diff = 0; // количество отличий = 0
		for (int j = 0; j < s.length(); j++)
			if (s[j] != m[j]) diff++; // если отличаются, то увеличиваем счетчик
		
		if (diff < min) // если эта строка отличается на меньшее кол-во позиций
		{
			min = diff; // min присваиваем это кол-во отличных позиций
			k = 1; // k присваиваем 1
			d[k - 1] = i; // вносим номер в массив
		}

		else if (diff == min) // если нашлось такое же кол-во позиций
		{
			k++; // увеливаем k
			d[k - 1] = i; // вносим номер в массив
		}
		m = "";
	}

	fin.close();
	ofstream fout ("OUTPUT.TXT");
	
	fout << k << endl; // выводим количество сообщений
	for (int i = 0; i < k; i++)
		fout << d[i] << " "; // и их номера

	fout.close();

	return 0;
}
Что мне нужно исправить?
niggainsoul вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Run-time error '9': subscript out of range. irina181 Microsoft Office Word 1 30.11.2017 10:30
Ошибка Subscript out of range ольгаг Microsoft Office Excel 5 01.10.2017 11:06
Ошибка string subscript out of range Pein95 Общие вопросы C/C++ 3 04.10.2013 01:18
Ошибка Run-time error '9' : Subscript out of range mad_moon Microsoft Office Excel 11 12.12.2011 23:37
Subscript out of range -в чем ошибка Bape}l{ka Microsoft Office Excel 4 14.11.2011 16:26