1

Тема: Масиви символів в С

Звертаюся по допомогу. Даний масив символів. Мені треба знайти символ,який найчастіше зустрічається. Я робила  це за допомогою двох циклів. Ну і скопіювала елементи першого масиву в інший. Я порівнювала елемент першого масиву з усіма символами другого і знаходила ,скільки раз зустрічається кожен символ. Проблема в тому,що це мені здається неефективним способом. Якщо в мене в масиві зустрічається літера а п*ять разів,я стільки ж разів рахую її кількість в цьому масиві. чи не могли б ви порадити ефективніший спосіб?

char mas1[N] = { 'i','s',' ','a','n',' ','a','r','r','a','y',' ','o','f',' ','c','h','a','r','a','c','t','e','r','s','\0' };
    char mas2[N]l;
int i=0,j = 0,kilk=0,max=0;
    char result;
    for (i = 0; i < sizeof(mas1)/sizeof(char); i++)
        mas2[i] = mas1[i];
    while (mas2[i] != '\0')
    {
        j = i;
        kilk = 0;
        while (mas1[j] != '\0')
        {
            if (mas2[i] == mas1[j])
                kilk++;
            j++;
        }
        if (kilk > max)
        {
            max = kilk;
            result = mas2[i];
        }
        i++;
    }

Це тільки частина програми.

2

Re: Масиви символів в С

char mas[N] = "is an array of characters"; //робить те саме, що й ваш перший рядок, але виглядає значно зручніше.
int counter[256];//масив лічільників
int i,max;
for(i=0;i<256;++i)
  counter[i]=0;//чистимо його
for(i=0;mas[i]!='\0';++i)
  counter[mas[i]]++;//полічили елементи
max = 0;
for(i=1;i<256;++i)
  if(counter[max]<counter[i])
    max=i;
printf("Найчастіший символ - '%c', він зустрічається %d разів",max,counter[max]);
Подякували: stasivdiana1

3

Re: Масиви символів в С

Потрібна допомога. Задана не порожня послідовність не порожніх слів із латинських букв; сусідні слова відділяються; одне від другого комами, а за останнім словом є крапка. Визначити слова, які містять хоча би одну букву d. Не можу знайти помилку в коді.

#include <stdio.h>
 
int main()
{

    char* arr = "God,love,snowl,rod,lord,pod,cold.";

    char *start = arr;
    while (arr)
    {
        if (*arr == ',' || *arr == '.')
        {
            if (*arr == 'd')
            {
                for (; start != arr; printf("%c", *start), start++);

                printf("\n");
            }
            if (*arr == '.') break;
            start = arr + 1;
        }
        arr++;
    }

    system("pause");
    return 0;
}

4

Re: Масиви символів в С

У нас порушники, схоже, ідуть серіями. Правила читали? Створіть окрему тему.