Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Файлы и строки: проверить каждую строку на сходство друг с другом - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Проверьте задачу - построить последовательность и всевозможные перестановки http://www.cyberforum.ru/cpp-beginners/thread875716.html
C++. Построить последовательность и всевозможные перестановки Здравствуйте. Помогите пожалуйста вот с такой программой... в С++ практически ничего не понимаю...только самые базовые основы... буду...
C++ Указатели, объясните задачу Объясните 4 пункт, желательно с примером. написать функцию char* find_const(), которая 1) перемещает в digit содержимое буфера buf_lit; 2) из входного потока читает литеру за литерой, пока не... http://www.cyberforum.ru/cpp-beginners/thread875711.html
Считать числа в массив, отсортировать. Считать числа в список. Изменить порядок элементов C++
Добрый день, помогите пожалуйста решить такую задачу: 1)Считать числа в массив. Спросить у пользователя в каком порядке его отсортировать (по возрастанию или убыванию). Отсортировать. 2)Считать...
C++ Определить есть ли в массиве строка, состоящая только из отрицательных элементов.
Определить есть ли в массиве строка, состоящая только из отрицательных элементов.
C++ Создание связанного списка с пом. класса и указателей http://www.cyberforum.ru/cpp-beginners/thread875688.html
Народ, есть задача. Я не могу решить все это. Помогите! В текстовом файле находится список студентов. Поля у студента: - ИД студента, целое число - имя - фамилия - отчетство - дата рождения
C++ Создать одномерный массив из восьми чисел, а каждое второе должно выводится на экран помогите пожалуйста! Нужно создать одномерный массив из восьми чисел, а каждое второе должно выводится на экран. подробнее

Показать сообщение отдельно
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
23.05.2013, 14:38
Выходит, что у тебя есть примерно такой файл?
"1234567
123
1
123456789
1234
1234
12345678"
, так?

Если да, то разбивать ничего не нужно. Это глупость. Просто если строки длинные (как вы сказали "много символов"), то самым правильным будет вместо проверки самих строк сначала проверять равенство их длин, а уж потом, если совпадут, и сами строки на равенство. Более того, если первая строка была проверена со всеми остальными, то вам не нужно больше её трогать, и трогать те, что были проверены. Можно завести доп. массив флагов для строк. Примерный код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i = 0; i < n - 1; ++i)
{
    if (flag[i] == 0)
    {
        for (int j = i + 1; j < n; ++ j) //j подстраивается под i. Это нужно для того, чтобы не проверять уже проверенные строки
        {
            if (flag[j] == 0 && length[i] == length[j] && str[i] == str[j]) // равенство строк не проверяется, если не выполняется второе или первое
            {
                //do something. j-ая строка - это строка-копия i-ой строки.
                flag[j] = 1; 
            }
        }
    }
}
Если же строк много, но их длина не большая, то лучше будет тогда убрать length. (небольшая = ~5-15 символов. Хотя я точно не уверен в этом)
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru