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

Для каждого символа заданного текста указать, сколько раз встречается в тексте - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
zoluxa
1 / 1 / 0
Регистрация: 13.12.2009
Сообщений: 18
14.12.2009, 10:14     Для каждого символа заданного текста указать, сколько раз встречается в тексте #1
Для каждого символа заданного текста указать, сколько раз встречается в тексте. Сообщение об одном символе не должно встречаться больше, чем один раз. только напишите пожалуйста в языке си и в консоль апликейшн

Буду очень благодарним!!!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2009, 10:14     Для каждого символа заданного текста указать, сколько раз встречается в тексте
Посмотрите здесь:

Для каждого из слов данного текста указать, сколько раз оно встречается в предложении C++
Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое из таких пар C++
C++ Для встречающихся в заданном тексте пар расположенных символов указать, сколько раз встречается каждое из таких пар.
Для каждого символа заданного текста указать, сколько раз он встречается в тексте C++
Для каждого из слов предложения указать, сколько раз оно встречается в предложении C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
14.12.2009, 10:48     Для каждого символа заданного текста указать, сколько раз встречается в тексте #2
На С++
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
 
void out(const std::pair<char, int> &rhs){
    std::cout << rhs.first << " : " << rhs.second << std::endl;
}
int main(){
 
    std::map<char, int> map;
    std::map<char, int>::iterator i;
    char *str = "Testing text...";
    
    for(; str != str + strlen(str); ++str)
        map[*str]++;
 
    for(i = map.begin(); i != map.end(); ++i)
        out(*i);
    return 0;
}
На С
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
 
int main(){
    int arr[256] = {0};
    char *str = "Testing text...";
 
    for(; str != str + strlen(str); ++str)
        arr[(int)*str]++;
    int i;
    for(i = 0; i < 256; ++i)
        if(arr[i]) printf("%c : %d\n", (char)i, arr[i]); 
    return 0;
}
Цитата Сообщение от Result
: 1
. : 3
T : 1
e : 2
g : 1
i : 1
n : 1
s : 1
t : 3
x : 1
Для продолжения нажмите любую клавишу . . .
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 106
19.12.2009, 21:29     Для каждого символа заданного текста указать, сколько раз встречается в тексте #3
Хм, у меня похожее, только мне надо для каждого слова заданного предложения указать долю гласных. Определить слово, в котором доля гласных максимальная.

Насколько я понимаю, у меня цикл другой. Вот только как отфильтровать гласные и согласные...
Если не трудно, помогите, пожалуйста
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
20.12.2009, 03:34     Для каждого символа заданного текста указать, сколько раз встречается в тексте #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
#include <map>
 
 
bool is_vowels(char ch){
    return (ch == 'e') || (ch == 'u') || (ch == 'i') || (ch == 'o') ||(ch == 'a'); 
}
 
 
void out(const std::pair<std::string, int> &rhs){
    std::cout << rhs.first << "\t " 
        << rhs.second 
        << " : "<< (rhs.first.size() - rhs.second) 
        << std::endl;
}
 
int main(){
    std::string rhs = "Testing Line Andrew maaaax";
    std::stringstream ss(rhs);
 
    std::map<std::string, int> map;
    std::map<std::string, int>::iterator im, max;
 
    std::vector<std::string> res;
    std::vector<std::string>::iterator i;
 
    std::copy(std::istream_iterator<std::string>(ss),
        std::istream_iterator<std::string>(),
        std::back_inserter(res));
    i = res.begin();
    for(; i != res.end(); ++i)
        map[*i] = count_if((*i).begin(), (*i).end(), is_vowels);
    
    im = max = map.begin();
    for(; im != map.end(); ++im){
        out(*im);
        if((*im).second > (*max).second)
            max = im;
    }
    std::cout << "Max: \n";
    out(*max);
    return 0;
}
http://codepad.org/HtsNx6U1
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 106
20.12.2009, 15:10     Для каждого символа заданного текста указать, сколько раз встречается в тексте #5
ISergey, Огромное спасибо! Сам не ожидал... Но сильно сложно, а можно проще, как в сообщении номер 2, где весь код в 14 строчек поместился? Можно проще: только слово, где больше всего и кол-во букв, без наворотов. Вы это сдеали уж больно профессионально

Добавлено через 18 минут
ISergey, да, только заметил: у меня не С++, а просто Си...
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
21.12.2009, 03:16     Для каждого символа заданного текста указать, сколько раз встречается в тексте #6
На Си можно.. но много кода будет и у меня времени для задач почти нету ( в принципе только на выходных )
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 16:38     Для каждого символа заданного текста указать, сколько раз встречается в тексте #7
прокомментируйте пожалуйста код
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
 
int main(){
        int arr[256] = {0};
        char *str = "Testing text...";
 
        for(; str != str + strlen(str); ++str)
                arr[(int)*str]++;
        int i;
        for(i = 0; i < 256; ++i)
                if(arr[i]) printf("%c : %d\n", (char)i, arr[i]); 
        return 0;
}
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 106
21.12.2009, 18:05     Для каждого символа заданного текста указать, сколько раз встречается в тексте #8
ISergey, ну ладно, и на том спасибо!!!
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 18:16     Для каждого символа заданного текста указать, сколько раз встречается в тексте #9
как можно преобразовать чтобы текст вводил пользователь?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
 
int main(){
        int arr[256] = {0};
        char *str = "Testing text...";
 
        for(; str != str + strlen(str); ++str)
                arr[(int)*str]++;
        int i;
        for(i = 0; i < 256; ++i)
                if(arr[i]) printf("%c : %d\n", (char)i, arr[i]); 
        return 0;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.12.2009, 19:45     Для каждого символа заданного текста указать, сколько раз встречается в тексте #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от MR_Andrew Посмотреть сообщение
каждого слова заданного предложения указать долю гласных. Определить слово, в котором доля гласных максимальная.
Двоякое какое-то определение - "доля гласных"... В смысле отношение количества гласных к количеству букв в слове? Если да, то переделайте немного, а если всё-таки "наибольшее количество гласных", то и так сойдёт. К тому же вывод забавный...
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
    
#define SPC " \t\n"
    
int isVowel(int c){
    static char vowels[] = "AEIOU";
    return ( strchr(vowels, toupper(c)) != NULL );
}
 
typedef struct {
    char *wrd;
    size_t vow_cnt;
    size_t len;
} Word_t;
 
int cmpByVowelsDesc(const void *a, const void *b){
    return (*(Word_t*)b).vow_cnt - (*(Word_t*)a).vow_cnt;
}
 
/* для каждого слова заданного предложения указать долю гласных. */
int main(void){
    char buf[BUFSIZ], *pBuf, *pWrd, *p;
    Word_t *words, *w;
    size_t size, max_vowels, max_index, i;
    
    while ( 1 ){
        printf("\nString: ");
        if ( !fgets(buf, BUFSIZ, stdin) )
            exit(1);
        if ( pWrd = strrchr(buf, '\n') )
            *pWrd = '\0';
        if ( !*buf )
            break;
        words = NULL;
        size = 0;
        for ( pWrd = strtok(buf, SPC); pWrd != NULL; pWrd = strtok(NULL, SPC) ){
            if ( ( words = (Word_t*)realloc(words, sizeof(Word_t) * (size + 1)) ) == NULL ){
                fprintf(stderr, "Memory error!\n");
                exit(1);
            }
            w = words + size;
            if ( ( w->wrd = strdup(pWrd) ) == NULL ){
                fprintf(stderr, "Memory error!\n");
                exit(1);
            }w->len = strlen(w->wrd);
            for ( w->vow_cnt = 0, p = w->wrd; *p; ++p )
                if ( isVowel(*p) )
                    ++(w->vow_cnt);
            ++size;
        }
        if ( !words ){
            fprintf(stderr, "Empty string!\n");
            exit(1);
        }
        
        qsort(words, size, sizeof(Word_t), cmpByVowelsDesc);
        printf("\nWord           Length  Vowels  %%\n----------------------------------------\n");
        for ( i = 0; i < size; ++i )
            printf("%-15s%-8d%-8d%.1f\n", words[i].wrd, words[i].len, words[i].vow_cnt, 
                (double)words[i].vow_cnt * 100.0 / (double)words[i].len);
        printf("----------------------------------------\n");
        
        for ( i = 0; i < size; ++i )
            free(words[i].wrd);
        free(words);
    }
    
    exit(0);
}
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 106
21.12.2009, 19:49     Для каждого символа заданного текста указать, сколько раз встречается в тексте #11
easybudda, как раз наибольшее количество. Огромное Вам спасибо!!!!
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.12.2009, 19:59     Для каждого символа заданного текста указать, сколько раз встречается в тексте #12
лишних переменных наоставлял
max_vowels, max_index вообще не нужны
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 106
21.12.2009, 20:00     Для каждого символа заданного текста указать, сколько раз встречается в тексте #13
Цитата Сообщение от easybudda Посмотреть сообщение
лишних переменных наоставлял
max_vowels, max_index вообще не нужны
Хорошо, спасибо. Учту
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
21.12.2009, 20:02     Для каждого символа заданного текста указать, сколько раз встречается в тексте #14
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Bloomfield Посмотреть сообщение
как можно преобразовать чтобы текст вводил пользователь?
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
#include <stdio.h>
#include <string.h>
 
 
char *mygetline(char *line, int size)
{
   if ( fgets(line, size, stdin) )
   {
      char *newline = strchr(line, '\n');
      if ( newline )
      {
         *newline =  '\0'; 
      }
   }
   return line;
}
 
int main(){
        int arr[256] = {0};
        char line[256];
        
        printf("Input Text: \n-> ");
 
        mygetline(line, sizeof line);
        
        char *str = line;
        for(; str != str + strlen(str); ++str)
                arr[(int)*str]++;
        int i;
        for(i = 0; i < 256; ++i)
                if(arr[i]) printf("%c : %d\n", (char)i, arr[i]); 
        
        system("pause");
        return 0;
}
Цитата Сообщение от Bloomfield Посмотреть сообщение
прокомментируйте пожалуйста код
Что именно не понятно?
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 20:53     Для каждого символа заданного текста указать, сколько раз встречается в тексте #15
как там происходит
C
1
2
3
4
5
for(; str != str + strlen(str); ++str)
        arr[(int)*str]++;
    int i;
    for(i = 0; i < 256; ++i)
        if(arr[i]) printf("%c %d\n", (char)i, arr[i]);
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
21.12.2009, 21:25     Для каждого символа заданного текста указать, сколько раз встречается в тексте #16
Цитата Сообщение от Bloomfield Посмотреть сообщение
как там происходит
что происходит?
Неужели так тяжело конкретизировать свой вопрос? На форуме нету людей которые могут читать мысли (иногда попадаются..).
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 21:34     Для каждого символа заданного текста указать, сколько раз встречается в тексте #17
как происходит обработка символов
и почему какой бы текст не был, буквы выводятся в алфавитном порядке (в результате работы проги)
MR_Andrew
12 / 12 / 2
Регистрация: 19.12.2009
Сообщений: 106
27.12.2009, 00:46     Для каждого символа заданного текста указать, сколько раз встречается в тексте #18
Сообщение было отмечено автором темы, экспертом или модератором как ответ
В общем, побороли
Очень прошу, у кого будет немного свободного времени, проверьте, пожалуйста, правильность написания комментариев (при условии владения украинским языком):
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
int myfunc (char* strtemp)      // Оголошення власної фунцкії та її коду.
  {                     // Ціль - окрема підпрограмма для пошуку
  char *pTmp = strtemp;         // голосних літер в окремих словах та
  int k = 0;                // підрахування їх кількості
 
 
  while( *pTmp != '\0' )        // Пошук голосних літер у циклі та
    {                   // знаходження їх кількості
    switch( *pTmp )
      {
      case 'a': case 'e': case 'i': case 'j':
      case 'o': case 'u': case 'y': k++;
      }
 
    pTmp++;
    }
 
  return k;
  }
 
 
 
 
 
 
int main ()
 
{
 
   int i;                // Оголошуємо змінні
   int M[100];
   int max;
 
 
char str[]="testing text jkjhkhj";   // Текст для тестування
char str2[100];              // Оголошення змінної str2, максимальна довжина
                         // якої 100 символів
strcpy (str2,str);           // Копіювання тексту з str до str2
int n=0;
 
char *words[100];            // Оголощенная нової знінної з вказівником *words
char *ps=str2;               // Присвоєння значення str2 вказівнику *ps
 
    words[0]=str2;           // У циклі розбиваємо задане речення на окремі
                     // слова, заповнюємо ними одновтмірний масив.
    n=1;                 // Слова відокремлюємо за допомогою пошуку
                     // пробілів. Цикл перебирає символи, доходить
    while (*ps !='\0')       // до " ", і заповнює масив відокремленими
      {              // елементами, нарощує їх кількість.
      if(*ps==' ')
        {
        words[n]=(ps+1);         // Массив words буде заповнений словами з 
        *ps='\0';            // тестового речення
        n++;             // n - лічільник елементів. Знаходимо к-ть слів.
        }
 
      ps++;
      }
 
 
 
 
 
 
int k;
 
for (i=0; i<n; i++)          // Застосовуємо цикл для всіх елементів масиву
     {
 
     ps = words[i];              // ps по черзі присвоюєно значення кожного 
                     // елемента масиву
     k=myfunc(ps);           // застосовуємо створену раніше функцію
                     // myfunc для обчислення кількості голосних
                     // у кожному елементі масиву
     M[i] =k;                // Створюємо ще один одновимірний масив М, 
                     // присвоюємо йому значення кількості голосних
                     // елеметнів масиву слів words
  
     printf ("%s\n", words[i]);      // Виводимо окремо слова і кількість голосних
     printf ("%d\n", k);         // у кожному слові
     }
             // Виконуємо пошук слова з найбільшою кількістю голосних букв.
 
    max = 0;                 // Змінній max присвоюємо значення "0".
 
    for (i=1; i<k; i++)          // Для всіх елементів масиву перевіряємо умову:
       {                 // якщо елемент масиву M[i] більший за значення
       if(M[i]>M[max])           // M[max], то зманній max присвоюємо нове 
     max=i;              // значення більшого елементу.  
       }
 
     printf ("Vivedenn9 informacii pro slovo z naib. kil'kistu golosnih\n");
     printf ("---\n%d\n", M[max]);   // Виводимо на екран слово з найб. к-тю голосних
     printf ("%s\n", words[max]);    // та саме значення
 
 
     getchar ();
     return 0;
 
}
А так же, если вас не затруднит - блок схема. Для меня это каторга, я вечно хоть где-то, но ошебусь. Хоть просто карандашом на бумаге и прислать мне, и перерисую в ворд

Заранее спасибо
Bloomfield
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
14.03.2010, 20:08     Для каждого символа заданного текста указать, сколько раз встречается в тексте #19
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Привет! Написал прогу. Суть её в том, что она должна выводить сколько раз встречается та или иная буква в строке текста (текст заглавными буквами)

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main ()
{
    SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
    int K[32] = {0}, i, j, n;
    char str[101], Alf[] = {'А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н'\
        'О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я'};
    n1 = strlen(Alf);
    printf ("Введите строку:\n");
    gets(str);
    n = strlen(str);
    for (j=0; j < n; j++)
        for (i=0; i != strlen(Alf); i++)
            if (str[j] == Alf[i]) {K[i]++; break; }
    for (i=0; i<=33; i++)
        if (K[i] != 0) printf ("%c: %i\n", Alf[i], K[i]);
    printf ("\n");
    system("PAUSE");
}
Но почему то кроме букв текста выводит ещё букву Я (даже если её нет в тексте) с мусорными значениями. В чём проблема? Спасибо!

Добавлено через 8 часов 54 минуты
Там кстати забыл удалить 12-ю строку, она там лишняя. Я думаю проблема в циклах, но немогу понять где именно

Добавлено через 23 часа 54 минуты
Сделал масиву К 34 элемента, и вроде заработало как надо, то есть буква 'Я' больше не показывается. Но незнаю правильно это или нет всё таки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2010, 10:17     Для каждого символа заданного текста указать, сколько раз встречается в тексте
Еще ссылки по теме:

C++ Для каждого из слов данного текста указать, сколько раз оно встречается в предложении
Для каждого из слов указать, сколько раз оно встречается в заданном тексте C++

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
15.03.2010, 10:17     Для каждого символа заданного текста указать, сколько раз встречается в тексте #20
C
1
    for (i=0; i != strlen(Alf); i++)
неправильное условие
должно быть i < strlen(Alf)

C
1
    for (i = 0; i < strlen(Alf); i++)
K[33] ?

Добавлено через 55 секунд
C
1
for (i=0; i<=33; i++)
то же самое (ошибка)

C
1
for (i = 0; i < 33; i++)
Добавлено через 1 минуту
чтобы вспоминать как работает цикл
рассмотри
C
1
for (i = 0; i <= 0; i++)
Yandex
Объявления
15.03.2010, 10:17     Для каждого символа заданного текста указать, сколько раз встречается в тексте
Ответ Создать тему
Опции темы

Текущее время: 19:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru