С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26

Найти первую повторяющуюся строку в массиве строк

01.03.2010, 11:39. Показов 2272. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, существует задача: найти первую повторяющуюся строку в массиве строк. Подскажите пожалуйста как правильно реализовать алгоритм. Я смутно себе это представляю, но точно думаю что все строки нужно сравнить между собой, а как дальше?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.03.2010, 11:39
Ответы с готовыми решениями:

Вернуть первую длинную строку, состоящую из k последовательных строк, взятых в массиве
Вернуть первую длинную строку, состоящую из k последовательных строк, взятых в массиве. # Пример: longest_consec (, 2) ->...

Если количество строк в массиве четное, то поменять строки местами по правилу: первую строку со второй, третью - с четвертой и т.д
Доброго времени суток, ув. Форумчане! Вынужден просить Вашей помощи в решении нескольких задач, т.к. сам на данный момент не разберусь...

Найти количество строк матрицы, похожих на первую строку
Дана целочисленная матрица размера MxN, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими,...

7
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
01.03.2010, 15:21
А что если упорядочить? Тогда найти повтор будет проще, а потом найти его номер в исходном массиве
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
01.03.2010, 15:33  [ТС]
Упорядочить каким образом, можно по-конкретнее? Просто я в этом абсолютный новичок. В книгах особо ничего не нашла.
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
01.03.2010, 15:48
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
using namespace std; 
 
#define MAX_STRS 5
int main() 
{
    string* List[MAX_STRS]; memset(&List[0], 0, MAX_STRS); 
    string Strs[MAX_STRS];
    for (size_t i = 0; i < MAX_STRS; i++)
        cin >> Strs[i];
 
    size_t Count = 0; List[Count++] = &Strs[0];
    for (size_t i = 1; i < MAX_STRS; i++)
    {
        for (size_t j = 0; j < Count; j++)
        {
            if ( (*List[j]) == Strs[i] )
            {
                cout << "Rep at " << i + 1 << " line: \"" << Strs[i] << "\"" << endl;
            //i = MAX_STRS; break;
            }
        }
        List[Count++] = &Strs[i];
    }
return 0; 
}
В общем так решилось. В List мы сохраняем те строки которые уже прошли в цикле и по этим сохраненным проверяем есть ли в List текущая строка - если есть то повтор.
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
01.03.2010, 16:09  [ТС]
Вот это да, вы еще студент, а уже пишите такие сложные программы, спасибо огромное, обязательно постараюсь разобраться в этом коде, вот бы мне научиться так понимать. Только можно вопрос: нам сказали, чтобы мы работали в этом алгоритме с символьными строками, наверное будут какие-то изменения в этом алгоритме или нужно просто сначала инициализировать массив как символьный типа char ar[]. Он наверное должен быть двумерным?
0
Автор FAQ
 Аватар для insideone
3687 / 964 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
01.03.2010, 17:02
Если честно сначала начал писать с символьными строками но подумал что слишком сложно выйдет. Тут хоть алгоритм ясен. Различия будут в том что символьные строки уже так
C++
1
(*List[j]) == Strs[i]
Не сравнишь, а нужно будет использовать функцию strcmp
List будет таким
C++
1
char* List[MAX_STRS]; // указатели на первые символы строк
И вся работа со строкой будет сводиться к работе с указателем на первый символ строки
Цитата Сообщение от ula Посмотреть сообщение
Он наверное должен быть двумерным?
Да, ярусность получается.
C++
1
char Strs[тут_сколько_строк][сколько_букв_в_одной_строке_максимум];
Однако можно и по другому...

Кроме того обращаться к строке нужно будет так
C++
1
&Strs[i][0] // указатель на первый символ строки
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
02.03.2010, 00:35
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include <set>  
int main()
{ 
    std::set <std::string> S;
    std::string s, res = "there are no same strings";
    while (std::cin >> s)
        if (S.find(s) == S.end())
            S.insert(s);
        else
        {
            res = s;
            break;
        }
    std::cout << res << std::endl;
    system ("pause");
}
Добавлено через 1 минуту
insideone,
ula, скажите чем вам мой вариант не подходит?
0
0 / 0 / 0
Регистрация: 04.12.2009
Сообщений: 26
02.03.2010, 11:35  [ТС]
Никаких претензий нет, просто преподаватель сказал выполнять это задание в виде формы:"...задание состоит из целевой функции, т.е. функции, выполняющей задание, указанное в варианте, и теста в виде функции main(). Тестовые аргументы следует передавать в виде аргументов командной строки и/или вводить по приглашению...".
7. Пример выполнения задания
Исходный текст программы с комментариями

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Ind1.cpp : Пример выполнения задания
//
 
#include "stdafx.h"
#include <conio.h>
 
// ----------------------------------------------
// функция подсчета строк, заканчивающихся цифрой,
// в массиве строк
// ----------------------------------------------
int CalcDigitFinish(char *ar[], int sz){
// параметры:
    // ar - массив строк
    // sz - размер этого массива        
    int cd = 0; // переменная счетчик нужных строк
    for (int i=0; i<sz; i++) { // цикл по строкам массива
        char *p=ar[i]; // берём указатель на строку массива
        while (*p) p++; // и угоняем его в конец строки
        if (p!=ar[i]){  // не пуста ли строка?
            char last = *(--p); // взяли последний символ
            if (last>='0' && last <='9')  // проверяем на цифру
                cd++; // увеличиваем счетчик
        }
    }
    return cd; // возвращаем результат
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    // тестовые строки
    char *a[] = {"xcjv", "hsjdfh3", "jsd1", "", "63475", "hjdfh"};
    int sa = 6; // размер массива
    printf ("Arrays to check:\n"); // предисловие к выводу исходных строк
    for (int i=0; i<sa; i++) printf ("%d) %s\n", i+1, a[i]); // выводим строки, которые проверям
    printf("Digit ended lines count = %d\n", CalcDigitFinish(a,sa)); // сразу печатаем результат вызова ф-ции
    _getch();
    return 0;
}
Вывод на консоль
Arrays to check:
1) xcjv
2) hsjdfh3
3) jsd1
4)
5) 63475
6) hjdfh
Digit ended lines count = 3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.03.2010, 11:35
Помогаю со студенческими работами здесь

Найти количество строк матрицы, похожих на первую строку
Написать программу с использованием функции. Дана положительная целочисленная матрица размера MXN (0&lt;M&lt;11, 0&lt;N&lt;11) Все числа не...

Найти количество строк матрицы, похожих на первую строку
Дана целочисленная матрица размера M x N. Различные строки (столбцы) матрицы назовем похожими, если совпадают множества чисел,...

Найти количество строк, похожих на первую строку матрицы
Дана целочисленная матрица размера MxN, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими,...

Найти количество строк, похожих на первую строку матрицы
Дана целочисленная матрица размера M x N, элементы которой могут принимать значения от 0 до 100. Различные строки матрицы назовем похожими,...

Найти количество строк матрицы, похожих на первую строку
Дана целочисленная матрица размера n × m. Различные строки (столбцы) матрицы назовем похожими, если совпадают множества чисел,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru