2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
1

Определить, как часто символ встречается в тексте

08.03.2010, 17:06. Показов 1797. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Проблема со встречаемостью символов.
struct my{
char fio[40];
int mark1;
};
(ввод,вывод и т.д) и вот нужно вывести встречаемость, что не так?
C
1
2
3
4
5
6
7
8
9
for(a=0;a<n;a++){
char arr[256];
    int i;
    for(i=0;i<256;i++)
        arr[i]=0;
        arr[list1[a].mark1]++;
    for(i=0;i<256;i++)
        if(arr[i]) printf("\n symbol %c vstrech %d raza",i,arr[i]); 
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.03.2010, 17:06
Ответы с готовыми решениями:

Определить, как часто символ встречается в тексте
что у меня не так сделано в коде по поводу встречаемости оценок? struct my{ char fio; int numer;...

Определить, как часто встречается определенный символ (например ‘0’) в строке
Как часто встречается символ?

ASCII символ, который наиболее часто встречается в тексте и ближе к началу алфавита
Задача: есть некий текст, содержащий как минимум один ASCII символ, но при этом может содержать и...

Определить наиболее часто встречающийся символ в тексте
дан текстовый файл необходимо определить наиболее часто встречающийся символ в тексте

18
159 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 636
08.03.2010, 19:15 2
int i; вы пишите как символ.Это числовое значение.
0
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
08.03.2010, 21:06  [ТС] 3
Вроде каждый символ имеет численное значение...
Этот код можно сделать как-то по другому?!
Может я не совсем понял Вашу мысль, не могли ли бы Вы написать полностью
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
09.03.2010, 16:32 4
Цитата Сообщение от zhenya.ya Посмотреть сообщение
C++
1
printf("\n symbol %c vstrech %d raza",i,arr[i]);
Попробуй
C++
1
printf("\n symbol %c vstrech %d raza",arr[i],i);
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
09.03.2010, 16:53 5
Я ничё не понял, дай весь код с комментариями.
0
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
09.03.2010, 19:47  [ТС] 6
теперь этот код считает вхождения символов, но вот если символ повторяется, прога пишет его как еще одну запись( т.е. ввожу студентам оценки: первому 7 и второму 7 ; результат: 7 встечаесть 1 раз
7 встречается 1 раз, хотя должно быть: 7 встр. 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
struct my{
char date1[40];
int mark1;
};
 
int n,j; 
void enter(struct my *p)
{
    int a;
printf(" skol`ko?!\n");
scanf("%i",&n);
for(a=0;a<n;a++)
{
    printf(" the first list\n");
    printf("enter the date:\n");
    scanf("%s",&p[a].date1);
    printf("enter the mark:\n");
    scanf("%i",&p[a].mark1);
    
}
    
    
    for(a=0;a<n;a++){
char arr[256];
    int i;
    for(i=0;i<256;i++)
        arr[i]=0;
        arr[p[a].mark1]++;
    for(i=0;i<256;i++)
        if(arr[i]) printf("\n symbol %i vstrech %d raza",i,arr[i]); 
            } 
 
}
 
void main(){
    struct my *p;
    p=(struct my *)malloc(30*sizeof(my));
    if(p==NULL) exit(1);
    enter(p);   
    getch();
    free(p);
}
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
09.03.2010, 21:56 7
Ну я же просил ВЕСЬ КОД и с КОММЕНТАРИЯМИ...

Ну. как бы то ни было.
В общем, приехали. что называется.
Смотри. Прога делает ТОЛЬКО ТО, что ты ей задал
Пусть введены две таких структуры: qqq 2 и www 2

Поехали подсчитывать
Зашли в цикл, сперва ты проходишь по первой стрктуре, потом по второй.
Вот здесь
C++
1
 for(a=0;a<n;a++) {
Итак, первая структура. Рассматривая её, в цикле ты объявляешь массив arr и обнуляешь его
C++
1
2
  for(i=0;i<256;i++)
   arr[i]=0;
Затем (мне вообще непонятно, на фига это) находишь в массиве arr элемент с номером, как и оценка. Так? Ведь p[a].mark1 это значение оценки, а нашем случае 2
Вот ты второй элемент находишь и инкременируешь его. И он становится равным 1
C++
1
arr[p[a].mark1]++;
Ну а дальше ты просто-напросто выводишь значение этого элемента. ОН равен 1. вот ты единицу и выводишь. То есть что написал, то прога и делает.
А потом выходишь из цикла, рассматриваешь вторую структуру и всё то же самое. И опять вывод единицы.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Это вот что делается. Теперь что ДОЛЖНО ДЕЛАТЬСЯ.
ЕСли ты мне на словах обрисуешь алгорим действий, я попытаюсь тебе помочь.
Я просто не могу врубиться в твой алгоритм

Добавлено через 9 минут
Короче, я понял, что ты хочешь сделать и знаю, как это реализовать и исправил. Код приводить пока не буду.
Попытайся сам.
Слушай.

Ты рассматриваешь 2 или больше структуры и всякий раз ты обнуляешь массив arr! Это в корне неправильно! То есть тебе надо обнулить его один раз перед прохождением по структурам и всё на этом. А то получается, если оценка 7 встречается 2 раза, то ты седьмой элемент инкременировал, он стал равен единице, вот теперь самое время его ещё раз инкременировать и он станет равным двум! А ты обнуляешь массив.

То есть массив над обнулить один(!) раз перед заходом во внешний цикл.
И вывод массива осуществить ТАКЖЕ после того, как рассмотришь ОБЕ структуры (или три или сколько их там)
И всё будет ОК.
0
18 / 17 / 7
Регистрация: 06.11.2009
Сообщений: 167
09.03.2010, 22:44 8
C++
1
2
3
4
5
6
7
8
9
10
int TMyClass::pks(System::String ^s, char c)
 {
  int n=0,i=0;              //функция возвращает количество вхождений символа в подстроку
  while(i!=s->Length)      
  {
    if(s[i]==c) n++;
    i++;
  }
  return n;
 }

C++
1
2
3
4
 for(int i=0;i<Prazmer;i++)
 {
   freq[stroka[i]]=pks(stroka,(char)stroka[i]);    //заполнение массива частот
 }
массив freq размером 256

получается в конце частота попадания символа в строку находится в массиве freq под индексом кода символа.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
09.03.2010, 22:50 9
Я понимаю, ты помочь хотел. Сперва вникни, потом пиши. Если бы всё было так просто, я бы так и написал.
...Там ищутся не символы даже, а числа. И не в подстроке, а, грубо говоря в массиве структур в одинаковых полях(mark1) элеметов.
0
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
09.03.2010, 23:47  [ТС] 10
Вы имеете в виду вот такие преобразования?:
C
1
2
3
4
5
6
7
8
9
10
11
char arr[256];
    arr[i]=0;
    for(a=0;a<n;a++){
        for(i=0;i<256;i++)
        {
        arr[p[a].mark1]++;
        arr[p[a].mark2]++;
        }
    }
    for(i=0;i<256;i++)
            if(arr[i]) printf("\n symbol %i vstrech %i raza",i,arr[i]);
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
09.03.2010, 23:55 11
Почти правильно.
Вы не находите, что компилятор ругнётся на необъявленное
mark2?
0
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
10.03.2010, 17:39  [ТС] 12
Заталкал туда и марк2 (хотя почему-то не ругался но его отсутствие)
но все равно не та делает
C
1
2
3
4
5
6
7
8
9
10
11
12
char arr[256];
                arr[i]=0;
    for(a=0;a<n;a++){
 
        for(i=0;i<256;i++)
        
arr[p[a].mark1]++;
        arr[p[a].mark2]++;
 
 
    for(i=0;i<256;i++)
        if(arr[i]) printf("\nsymbol %i vstrech %i raza\n",i,arr[i]);
}
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
10.03.2010, 17:42 13
КУда туда?
Дай мне код, который не ругался на mark2
0
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
10.03.2010, 17:58  [ТС] 14
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
struct my{
char fio[40];
int numer;
char date1[40];
char date2[40];
int mark1;
int mark2;
};
 
int n,j,i; 
struct my list1[10]= { {"Vasya",433},{"zhenya",34},{"bobr",45},{"sasha",342},{"knedlik",90}};
struct my list2[10]={ {"masha",433},{"tanya",34},{"ulya",45},{"katya",342},{"polina",4322}};
void enter(struct my *p)
{
    int a;
printf(" skol`ko?!\n");
scanf("%i",&n);
if(n>0){
for(a=0;a<n;a++)
{
    printf(" the first list\n");
    printf("enter the date:\n");
    scanf("%s",&p[a].date1);
    printf("enter the mark:\n");
    scanf("%i",&p[a].mark1);
    printf("\n");
    printf("vvedite list2:\n");
    printf("enter the date:\n");
    scanf("%s",&p[a].date2);
    printf("enter the mark:\n");
    scanf("%i",&p[a].mark2);
}
printf("SPISOK 1:\n");
printf("# fio        nmber      date         mark\n");
printf("___________________________________________________\n");
for(a=0;a<n;a++){
        printf("%i %6s %8i %10s %12i",a,list1[a].fio,list1[a].numer,p[a].date1,p[a].mark1);
        printf("\n");}
    printf("\nSPISOK 2:\n");
printf("# fio        nmber      date         mark\n");
printf("___________________________________________________\n");
    for(a=0;a<n;a++){
printf("%i %6s  %8i %10s %12i\n",a,list2[a].fio,list2[a].numer,p[a].date2,p[a].mark2);
 
    }   
    char arr[256];
                
    for(a=0;a<n;a++){
 
        for(i=0;i<256;i++)
        arr[i]=0;
arr[p[a].mark1]++;
arr[p[a].mark2]++;
    for(i=0;i<256;i++)
        if(arr[i]) printf("\nsymbol %i vstrech %i raza\n",i,arr[i]);
    }
    
}
else printf(" Error");
}
 
void main(){
    char arr[256];
    struct my *p;
    p=(struct my *)malloc(30*sizeof(my));
    if(p==NULL) exit(1);
    enter(p);   
    
    getch();
    free(p)
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
10.03.2010, 18:23 15
ПОчему Вы мне морочите голову?
ВЫ приводите кусок кода с переменной mark2
Я, предположив, что она незадекларирована, ставлю под сомнение правильность кода. ВЫ вместо того, чтобы сказать, что она ЗАДЕКЛАРИРОВАНА, уверяете меня что я старый дурень всё напутал и компиллято не ругается на незадекларированные имена.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
[FONT=monospace]char arr[256];                                          
for(a=0;a<n;a++){                   
 for(i=0;i<256;i++)                 
    arr[i]=0; 
 
 arr[p[a].mark1]++; 
 arr[p[a].mark2]++;         
 
 for(i=0;i<256;i++)                 
  if(arr[i]) 
      printf("\nsymbol %i vstrech %i raza\n",i,arr[i]);         
}  
[/FONT]
Значит, ещё раз.

То есть тебе надо обнулить его один раз перед прохождением по
структурам и всё на этом. А то получается, если оценка 7 встречается 2
раза, то ты седьмой элемент инкременировал, он стал равен единице, вот
теперь самое время его ещё раз инкременировать и он станет равным двум!
А ты обнуляешь массив.

Всё ясно?
Ясно где нужно обнулять массив и главное, почему там?
Обнуляй там и код сюда. Если вопросов нето, будем считать, что ты ПОНЯЛ, почему массив надо обнулять НЕ КАЖДЫЙ РАЗ, рассматриваая очередную структуру, а ПЕРЕД рассматриванием структур (перед циклом), один раз то есть

...Во вчерашнем коде (сообщение номер 10 обнуление почему-то отсутствует, а я не заметил)
0
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
10.03.2010, 20:20  [ТС] 16
Может нужно сделать так?

C
1
2
3
4
5
6
7
8
9
10
11
12
char arr[256];
    for(i=0;i<256;i++)
            arr[i]=0;   
    for(a=0;a<n;a++){
        for(i=0;i<256;i++)
        {
arr[p[a].mark1]++;
arr[t[a].mark2]++;
        }
for(i=0;i<256;i++)
        if(arr[i]) printf("\nsymbol %i vstrech %i raza\n",i,arr[i]);
    }
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
10.03.2010, 20:59 17
МНе эти гадания не нравятся. Такое ощущение, что ты угадываешь.
...Да, именно так и надо сделать. Ты вынес обнуление массивы за пределы цикла, с помощью которого просматриваешь массив структур.

Дальше что надо сделать?

Смотри то же моё сообщение вчерашнее.
1
2 / 2 / 2
Регистрация: 29.11.2009
Сообщений: 320
10.03.2010, 22:02  [ТС] 18
во! дошло! низкий покло! наконецто вот что нужно:
C
1
2
3
4
5
6
7
8
9
10
char arr[256];
            for(i=0;i<256;i++)
        arr[i]=0;   
            for(a=0;a<n;a++){
arr[p[a].mark1]++;
arr[t[a].mark2]++;
    }
    for(i=0;i<256;i++)
        if(arr[i]) printf("\nsymbol %i vstrech %i raza\n",i,arr[i]);
}
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,681
10.03.2010, 22:17 19
Ну да.
Только мне не понять, откуда появилась mark2

Две отметки ставят человеку?
Ну, может быть. Изначально предполагалась одна.
Вот код с одной отметкой.
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct my{
char date1[40];
int mark1;
};
 
int n,j; 
void enter(struct my *p) {
        int a;
printf(" skol`ko?!\n");
scanf("%i",&n);
for(a=0;a<n;a++) {
        printf(" the first list\n");
        printf("enter the date:\n");
        scanf("%s",&p[a].date1);
        printf("enter the mark:\n");
        scanf("%i",&p[a].mark1);
        
}
  char arr[256];
  int i;
  for(i=0;i<256;i++)
   arr[i]=0;
 
 
 for(a=0;a<n;a++) {
 
  
  arr[p[a].mark1]++;
 
  } 
  for(i=0;i<256;i++)
   if(arr[i]) 
    printf("\n symbol %i vstrech %d raza",i,arr[i]); 
 
 
 }
 
 
int main(){
int i=10;
int *p=0;
 return 0;
}
0
10.03.2010, 22:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2010, 22:17
Помогаю со студенческими работами здесь

Определить ASCII символ наиболее часто встречающийся в тексте
Здравствуйте. Как правильно решить данную задачу. Помогите пож-та. Задача: есть некий текст, в...

Используя стек, определить символ, наиболее часто появляющийся в случайно выбранном тексте
Задача: Используя стек, определить символ, наиболее часто появляющийся в случайно выбранном...

Определить, сколько раз в тексте встречается заданный символ
Дана строка содержащая текст состоящий из слов. Указать процентное содержание сколько раз...

Определить сколько раз встречается в тексте каждый символ
Создать программу с использованием одномерных массивов. Вводится последовательность символов,...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

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