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

Вывести слова которые повторяются и количество их повторения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ проверка функций http://www.cyberforum.ru/cpp-beginners/thread437052.html
Всем привет! Вот проблема: #include<iostream.h> #include<conio.h> #include<math.h> struct Angle { int degree; int minute;
C++ помогите с Error 13 ??? во время компиляцеи видает ошибку 13, после printf , как исправить ошибку ? #include <stdio.h> int main (void) { char name1 , name2 , name3 ; char sch1 , sch2 , sch3 ; int sc1,sc2,sc3;... http://www.cyberforum.ru/cpp-beginners/thread437017.html
Очень маненькая(в процессе) база данных) C++
Есть программа ( в процессе разработки), хотел бы услышать, как ее можно уменьшить в плане объема текста) Но, чтобы так же хорошо читалась) // Простая программа базы данных для работников компании...
C++ Преобразовала из Pascal в C++, где ошибка?
Переписала программу из паскаля в с++ компиляор запускает, но не правильно выводит, в чем ошибка? Само условие: Все четные элементы целочисленного массива K(n) поместить в массив L(n), а нечетные...
C++ Реализовал shared pointer class. В каких местах можно улучшить ? http://www.cyberforum.ru/cpp-beginners/thread436995.html
Изучаю с++, реализовал класс shared pointer(разумеется не в полной мере), хотелось бы услышать совета от людей более хорошо разбирающихся в с++, что можно было бы улучшить в имеющейся реализации....
C++ Стек или динамическая память!? Добрый вечер всем! Прошу ответить на вопрос (ниже приведен код): почему строка "Test!" выводится на экран? Она же не была создана в дин. памяти, т.е. должна была "загнуться" после 1ой строки main().... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
03.02.2012, 12:46
Цитата Сообщение от 6blgJlo'KOgeP Посмотреть сообщение
Ребят помогите реализовать следующую програмку: нужно чтоб когда на входе программы было например "мама мыла раму раму мыла мама".
программа вывела: слова которые повторяются и количество их повторения.
мама - 2раза
раму - 2раза
мыла - 2 раза
помогите
Попробуй вот этот код - он отличен от всех предложенных
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
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
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
 
char * getWord(char * word)
{
    //ГќГІГ® Г*Г* ñëó÷Г*Г© åñëè ñëîâî èä¸ò Г± Г§Г*ïÿòîé ГўГЄГ®Г*öå èëè ГҐГ№Вё Г·ГҐГ¬
    //ïðèìåð : ñëîâî, ïîñëå getWord âûéäåò ñëîâî
    long sLen = strlen(word);
    while(!isalpha(word[sLen - 1]) && !isdigit(word[sLen - 1]))
    {
        sLen = sLen - 1;
        word[sLen] = '\0';
    }
    return word;
}
 
long getWords(char * text, char ** WordArray)
{
    long nWord;//×èñëî ñëîâ
    long sLen;//ÄëèГ*Г*Г* ГІГҐГЄГ±ГІГ*
    long wLen;//ÄëèГ*Г*Г* ñëîâГ*
    char word[32];//ГЃГіГґГґГҐГ° äëÿ ñëîâГ*
    char *str;//ÓêГ*Г§Г*òåëü Г*Г* Г*Г*Г·Г*ëî ïîäñòðîêè Г±Г® ñëîâîì
    sLen = strlen(text);
    long i = (nWord = 0);
    while(i < sLen)
    {
        sscanf(text + i,"%s",word);
        str = strstr(text + i, word);
        wLen= strlen(word);
        i   = strlen(text) - strlen(str) + wLen;
        if(WordArray != NULL)//Åñëè WordArray òîëüêî Г±Г·ГЁГІГ*ГҐГ¬ ÷èñëî ñëîâ
        {
            WordArray[nWord] = (char *)malloc(wLen*sizeof(char));
            strcpy(WordArray[nWord],getWord(word));
        }
        nWord = nWord + 1;
    }
    return nWord;
}
 
int main()
{
    long i,j,n;
    long nWord;//×èñëî ñëîâ Гў ГІГҐГЄГ±ГІГҐ
    char text[1024] = {0};
    char ** WordArray;//ÓêГ*Г§Г*òåëü Г*Г* Г¬Г*Г±Г±ГЁГў ñëîâ ГЁГ§ ïðåäëîæåГ*ГЁГї
    long * flags;//ГЊГ*Г±Г±ГЁГў ГґГ«Г*ãîâ äëÿ ГЁГ*äåêñîâ WordArray
    while(true)//ÌîæГ*Г® áóäåò ââîäèòü ГІГҐГЄГ±ГІ õîòü äî ГЎГҐГ±ГЄГ®Г*ГҐГ·Г*îñòè
    {
        WordArray = NULL;
        flags     = NULL;
        printf("Enter text(less than 1024 chars)\n");
        scanf("%[^\n]",text);
        getchar();//ÓáðГ*ëè '\n' îò ââîäГ*
        if((nWord = getWords(text, WordArray)) < 1)
            printf("Error updating words\n");
        else
        {
            //Âûäåëèëè ГЇГ*ìÿòü ïîä ГіГЄГ*Г§Г*òåëè Г*Г* ñòðîêè Г±Г® ñëîâГ*ìè ГЁГ§ ГІГҐГЄГ±ГІГ*
            WordArray = (char **)malloc(nWord*sizeof(char *));
            //Òåïåðü óæå ïåðåïèñГ*ëè ñëîâГ* ГЁГ§ ñòðîêè Гў Г¬Г*Г±Г±ГЁГў
            nWord = getWords(text, WordArray);
            flags = (long *)malloc(nWord*sizeof(long));
        }
        printf("Number of words in string %d\n",nWord);
        for(i = 0; i < nWord; i++)
        {
            for(j = 0,n = 0; j < nWord; j++)
            {
                if(strcmp(WordArray[i],WordArray[j]) == 0)
                {
                    if(i != j)
                        flags[j] = 1;//Ïîìå÷Г*ГҐГ¬ ñëîâî óæå ïîñ÷èòГ*Г*Г*ûì
                    n = n + 1;
                }
            }
            if(flags[i] != 1)
                printf("%s chislo raz v stroke %d\n",WordArray[i],n);
        }
        //ГЌГі Г* òåïåðü âûñâîáîæäГ*ГҐГ¬ ГЇГ*ìÿòü
        for(i = nWord - 1; 0 <= i; i--)
            WordArray[i] = (char *)realloc((void *)WordArray[i],sizeof(char *));
        free((void *)WordArray);
        free((void *)flags);
    }
    system("pause");
    return 0;
}

Не по теме:

PS:easybudda, зачем strtok - он же небезопасный и строку гробит, почему за столько лет от него не откажешся???
Думаю выше нормальный Си-велосипед для парсинга слов...

0
Миниатюры
Вывести слова которые повторяются и количество их повторения  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru