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

Группы анаграмм в строке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Совместить два цикла http://www.cyberforum.ru/cpp-beginners/thread701391.html
Лаба по инфе на совершенные числа, проверка и вывод всех в диапазоне. Пашет нормально, но учитель сказал совместить два похожих цикла в один. Кто что может подсказать? void check_perfect(int A) { int sum=0; for(int i=1; i<A; i++) if(A%i==0) { sum += i; } if(sum==A) cout<<"Число совершенно, не трогай его"<<endl;
C++ Использование конструкторов и деструктора при проектировании пользовательского класса предметная область цветок. Отсортировать массив объектов по свойству месяц цветения (месяц задать полем типа char*). Получить отсортированный список названий цветов по заданному месяцу цветиния. помогите в решении. http://www.cyberforum.ru/cpp-beginners/thread701388.html
Использование указателей при работе с одномерными и двумерными массивами C++
Даны натуральное число n, действительные числа A1......An . Если в последовательности A1.....An есть хотя бы один член, меньший, чем -3, то все отрицательные члены заменить их квадратами, оставив остальные члены без изменения; в противном случае домножить все чле-ны на 0.1. Просьба написать программу на Turbo C++
C++ Работа с матрицей
Подскажите пожалуйста как правильно написать? В классе имеется матрица(char**), в функцию передаю класс(char find_path(Map Level)) Провожу дальнейшие махинации... и дохожу до кода: else { t=a; while(t>1) { if(a==t-1)
C++ Удаление столбца матрицы http://www.cyberforum.ru/cpp-beginners/thread701383.html
Задана матрица А целых чисел размера N x M (N,M <= 20, N и M задаются как параметры). Преобразовать ее в матрицу В путем удаления столбца этой матрицы с минимальным номером, в котором все элементы отрицательны и упорядочены по убыванию. Мои попытки: #include <stdio.h> #define N 20 #define M 20 int main() {
C++ Функция: заполнить вектор простыми числами и вывести их на экран Задача: Написать функцию, которая заполняет вектор простыми числами и выводит их на экран. Проблема: Не добавляется "2" в начало вектора. Как это исправить? Заранее спасибо. #include <iostream> #include <vector> using namespace std; подробнее

Показать сообщение отдельно
Delmellor
1 / 1 / 0
Регистрация: 18.11.2012
Сообщений: 37

Группы анаграмм в строке - C++

19.11.2012, 13:49. Просмотров 904. Ответов 8
Метки (Все метки)

Всем доброго времени суток.
Я в С++ начинающий.
Есть задача, которую не получается написать; не получается скорее по причине отсутствия нужных знаний... Пожалуйста, если кому-то не лень, объясните, как можно написать попроще. Искал на форуме подобную задачу, но решения сложны для понимания, да и задачи совсем не аналогичные.

Постановка задачи:
В строке найти все группы слов-анаграмм (слова, получаемые одно из другого перестановкой букв, например: автор, отвар, товар; кот, кто, ток – две группы анаграмм).
Присутствуют входной и выходной файлы. В первом записана строка со словами, разделёнными пробелом.
В выходной файл нужно вывести группы анаграмм; каждую группу в отдельную строку.

Пример:
в файле infile лежит строка:
секта автор рост весточка аскет товар сигара трос тесак отвар качество сорт месть ток свет сетка трос
после выполнения содержимое файла outfile будет таким:
секта аскет тесак сетка
автор товар отвар
рост трос сорт
весточка качество
Объясните, как это можно реализовать, пожалуйста. Буду благодарен.
Либо просто пошагово объясните этот код (не мой; не до конца понимаю его), если так будет легче (сомневаюсь думаю, у меня появится куча дополнительных вопросов).
C++ (Qt)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
#define MAXLINE   1000   /* максимальная длина строки */
#define MAXWORDS  100    /* максимальное количество слов */
 
int CheckCharsLine(const char *l, const char *set); 
 
/* ищет анаграммы в файле
   и записывает их в ряд в другой файл */
main()    
{
    FILE *ifp, *ofp;
    char line[1000], *dup;
    char *words[100], *p, **w, **cur;
    long nwords, i, j;
    int first, printed;
    enum { NO, YES };
    const char *iname = "infile",
               *oname = "outfile";
    
    ifp = fopen(iname, "r");
    ofp = fopen(oname, "w");
    if (!(ifp && ofp)) {
        fprintf(stderr, "error: files" "\n");
        return 1;
    }
    
    if (!fgets(line, sizeof line, ifp)) {
        fprintf(stderr, "error: no line" "\n");
        return 2;
    }
    
    if (!(dup = malloc(strlen(line)+1))) {  
        fprintf(stderr, "error: memory" "\n");
        return 3;
    }    
        
    strcpy(dup, line);
    
    for (p = strtok(dup, " "), w = words; 
         p;
         p = strtok(NULL, " "))
        *w++ = p;
    
#if 1  
    printf("%s", line);
    printf("%ld" "\n", nwords);
#endif    
    
    for (cur = words, i = 0; i < nwords; i++, cur++) {
        first = YES;
        printed = NO;
        for (w = cur+1, j = i+1; j < nwords-1; j++, w++)
            if (CheckCharsLine(*w, *cur) > 0) {
                if (first == YES) {
                    fprintf(ofp, "%s" " ", *cur);
                    first = NO;
                }    
                fprintf(ofp, "%s" " ", *w);
                *w = '\0';
                printed = YES;
            }    
        if (printed == YES)
            putc('\n', ofp);
    }
    
    free(dup);
    
    fclose(ifp);
    fclose(ofp);
    
    return 0;
}
 
/* CheckCharsLine:  проверяет состоит ли l
                    только из символов в set */
int CheckCharsLine(const char *l, const char *set)
{
    const char *t;
    
    if (!(l && set && *l && *set))
        return EOF;
    for (t = set; *t; t++)
        if (!strchr(l, *t))
            return 0;
    for ( ; *l; l++)
        if (!strchr(set, *l))
            return 0;
    return 1;
}
Добавлено через 18 часов 44 минуты
Кто-нибудь может помочь?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru