Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
1 / 1 / 0
Регистрация: 13.12.2009
Сообщений: 18
1

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

14.12.2009, 10:14. Показов 5758. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Для каждого символа заданного текста указать, сколько раз встречается в тексте. Сообщение об одном символе не должно встречаться больше, чем один раз. только напишите пожалуйста в языке си и в консоль апликейшн

Буду очень благодарним!!!!!
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2009, 10:14
Ответы с готовыми решениями:

Для каждого символа заданного текста указать, сколько раз он встречается в тексте
Доброго времени суток , прошу помочь с решением задачи : Для каждого символа заданного текста...

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

Для каждого из слов заданного текста указать сколько раз оно встречается
Для каждого из слов заданного текста указать сколько раз оно встречается.

Для каждого из слов указать, сколько раз оно встречается в заданном тексте
Дан текст, содержащий n строк. Для каждого из слов указать, сколько раз оно встречается.

21
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 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
Для продолжения нажмите любую клавишу . . .
2
14 / 14 / 3
Регистрация: 19.12.2009
Сообщений: 119
19.12.2009, 21:29 3
Хм, у меня похожее, только мне надо для каждого слова заданного предложения указать долю гласных. Определить слово, в котором доля гласных максимальная.

Насколько я понимаю, у меня цикл другой. Вот только как отфильтровать гласные и согласные...
Если не трудно, помогите, пожалуйста
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 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
0
14 / 14 / 3
Регистрация: 19.12.2009
Сообщений: 119
20.12.2009, 15:10 5
ISergey, Огромное спасибо! Сам не ожидал... Но сильно сложно, а можно проще, как в сообщении номер 2, где весь код в 14 строчек поместился? Можно проще: только слово, где больше всего и кол-во букв, без наворотов. Вы это сдеали уж больно профессионально

Добавлено через 18 минут
ISergey, да, только заметил: у меня не С++, а просто Си...
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
21.12.2009, 03:16 6
На Си можно.. но много кода будет и у меня времени для задач почти нету ( в принципе только на выходных )
0
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;
}
0
14 / 14 / 3
Регистрация: 19.12.2009
Сообщений: 119
21.12.2009, 18:05 8
ISergey, ну ладно, и на том спасибо!!!
0
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;
}
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12456 / 7480 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
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);
}
0
14 / 14 / 3
Регистрация: 19.12.2009
Сообщений: 119
21.12.2009, 19:49 11
easybudda, как раз наибольшее количество. Огромное Вам спасибо!!!!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12456 / 7480 / 1753
Регистрация: 25.07.2009
Сообщений: 13,759
21.12.2009, 19:59 12
лишних переменных наоставлял
max_vowels, max_index вообще не нужны
0
14 / 14 / 3
Регистрация: 19.12.2009
Сообщений: 119
21.12.2009, 20:00 13
Цитата Сообщение от easybudda Посмотреть сообщение
лишних переменных наоставлял
max_vowels, max_index вообще не нужны
Хорошо, спасибо. Учту
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 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 Посмотреть сообщение
прокомментируйте пожалуйста код
Что именно не понятно?
1
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]);
0
Maniac
Эксперт С++
1464 / 965 / 160
Регистрация: 02.01.2009
Сообщений: 2,820
Записей в блоге: 1
21.12.2009, 21:25 16
Цитата Сообщение от Bloomfield Посмотреть сообщение
как там происходит
что происходит?
Неужели так тяжело конкретизировать свой вопрос? На форуме нету людей которые могут читать мысли (иногда попадаются..).
0
2 / 2 / 1
Регистрация: 16.11.2009
Сообщений: 51
21.12.2009, 21:34 17
как происходит обработка символов
и почему какой бы текст не был, буквы выводятся в алфавитном порядке (в результате работы проги)
0
14 / 14 / 3
Регистрация: 19.12.2009
Сообщений: 119
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;
 
}
А так же, если вас не затруднит - блок схема. Для меня это каторга, я вечно хоть где-то, но ошебусь. Хоть просто карандашом на бумаге и прислать мне, и перерисую в ворд

Заранее спасибо
0
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 элемента, и вроде заработало как надо, то есть буква 'Я' больше не показывается. Но незнаю правильно это или нет всё таки
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
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++)
1
15.03.2010, 10:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2010, 10:17
Помогаю со студенческими работами здесь

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

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

Для каждого слова из заданного списка найти, сколько раз оно встречается в тексте
Разработать программу с использованием функции пользователя. Указанную в задании строку...

Для каждого из слов предложения указать, сколько раз оно встречается в предложении
Добрый день! Не могу решить две задачи в с++ , поскажите пожалуйста: 1. Для каждого из слов...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru