Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 31.03.2019, 11:41   #1
niggainsoul
Пользователь
 
Регистрация: 25.03.2019
Сообщений: 10
Репутация: 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка Run-time error '9': subscript out of range. irina181 Microsoft Office Word 1 30.11.2017 11:30
Ошибка Subscript out of range ольгаг Microsoft Office Excel 5 01.10.2017 12: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


20:04.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru