Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
smail19
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 29
1

Определить, сколько раз в строку входит группа букв "abc"

14.04.2017, 20:36. Просмотров 1014. Ответов 8
Метки нет (Все метки)

Дана строка. Определить, сколько раз в нее входит группа букв abc.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2017, 20:36
Ответы с готовыми решениями:

Дан текст из нескольких строк. Подсчитать, сколько раз входит символ "а" в текст
Дан текст из нескольких строк. Подсчитать, сколько раз входит символ "а" в текст, сколько раз...

Подсчитать, сколько раз среди заданных символов встречается символ "+" и сколько раз символ "*"
даны натуральное число n, символы s1,...sn. Подсчитать: сколько раз среди данных символов...

Определить, сколько раз в данном тексте встречается последовательность символов "аба"
Определить, сколько раз в данном тексте встречается последовательность символов "аба".Help

Определить, сколько букв "о" есть в строке
нужна програма Вычислить сколько букв "о" есть в имени

Определить слово с максимальным числом букв "а" и количество таких букв "а"
Слова в предложении разделены пробелом.Предложения заканчиваются на . ! ? Определить слово с...

8
Mournful Max
Велосипедист...
349 / 216 / 74
Регистрация: 15.12.2015
Сообщений: 785
Завершенные тесты: 1
14.04.2017, 23:07 2
Лучший ответ Сообщение было отмечено smail19 как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
#define C 16  /* Тут регулируешь длину строки */
 
int main(void)
{
    char str[C];
    printf("Enter a string: ");
    fgets(str, C, stdin);
    
    int count = 0;
    for (size_t i = 0; i < C; ++i)
        if (str[i] == 'a' || str[i] == 'b' || str[i] == 'c')
            ++count;
            
    printf("\nNumber of coincidences: %d", count);
 
    return 0;
}
1
CoderHuligan
773 / 554 / 203
Регистрация: 30.06.2015
Сообщений: 3,139
Записей в блоге: 28
15.04.2017, 11:47 3
Лучший ответ Сообщение было отмечено smail19 как решение

Решение

Цитата Сообщение от Captain Maxee Посмотреть сообщение
If my code is wrong, correct me.
Подкорректирую.))
Обычно место под строку выделяют с некоторым запасом, а длина реальной строки может быть и нулевой. Поэтому цикл, в котором происходит сравнение с максимальной длиной выделенной для строки несколько некорректно из-за того, что если реальная строка закончится, то проверки будут проводиться над МУСОРОМ. И даже может что-то и совпасть.. Для массивов это правильно, но для строк неверно. Лучше:
C
1
 for (size_t i = 0; str[i]!='\0'; ++i)
или проще:
C
1
 for (size_t i = 0; str[i]; ++i)
3
Catstail
Модератор
24571 / 12484 / 2279
Регистрация: 12.02.2012
Сообщений: 20,264
15.04.2017, 12:31 4
Captain Maxee, CoderHuligan, код просто неверный. Т.к. он будет считать не число вхождений подстроки "abc" (именно в таком порядке!), а суммарное число букв 'a', 'b' и 'с', встречающихся на любых местах.

Вот корректный код:

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>
 
int strCounter(char *From, char *What)
{
    int i,j,lf,lw,k,count,n;
    
    lf=strlen(From);
    lw=strlen(What);
    
    if (lw > lf) return 0;
    
    if (lw == lf) return (strcmp(From,What))?1:0;
    
    count=0;
    k=lf-lw+1;
    
    for (i=0; i<k; i++)
    {
       n=0;
       
       for (j=0; j<lw; j++) 
         if (What[j] == From[i+j])
            n++;
         else
            break;
            
       if (n==lw) count++;
    }            
    
    return count;
    
}    
       
 
int main(int argc, char *argv[])
{
 
  char *F="aaabbbbabczzzabc";
  char *W="abc";
  
  printf("%d\n",strCounter(F,W));
  
  system("PAUSE");  
  return 0;
}
3
15.04.2017, 12:31
smail19
0 / 0 / 0
Регистрация: 23.12.2016
Сообщений: 29
15.04.2017, 13:33  [ТС] 5
Исправил немного код под свое задание. Все работает, но интересно такой код корректен с логической стороны?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <locale.h>
#define C 16
int main(void)
{
    setlocale(LC_ALL, "RUS");
    char str[C];
    printf("Введите строку: ");
    fgets(str, C, stdin);
    int count = 0;
    for (size_t i = 0; i < C; ++i) {
        if (str[i] == 'a' && str[i+1] == 'b' && str[i+2] == 'c')
            ++count;
    }
    printf("\nКол-во повторений abc: %d", count);
    system("pause");
}
0
CoderHuligan
773 / 554 / 203
Регистрация: 30.06.2015
Сообщений: 3,139
Записей в блоге: 28
15.04.2017, 13:50 6
Цитата Сообщение от smail19 Посмотреть сообщение
но интересно такой код корректен с логической стороны?
Выше уже всё было сказано...
0
Mournful Max
Велосипедист...
349 / 216 / 74
Регистрация: 15.12.2015
Сообщений: 785
Завершенные тесты: 1
15.04.2017, 15:24 7
CoderHuligan, точно. Спасибо, что заметил
1
Catstail
Модератор
24571 / 12484 / 2279
Регистрация: 12.02.2012
Сообщений: 20,264
15.04.2017, 18:41 8
Цитата Сообщение от smail19 Посмотреть сообщение
но интересно такой код корректен с логической стороны?
- оба. Но они решают разные задачи. Мой ищет строку "авс", а другой ищет буквы а, b и c врассыпную.
0
easybudda
Модератор
Эксперт JavaЭксперт CЭксперт С++
10537 / 6239 / 1567
Регистрация: 25.07.2009
Сообщений: 11,876
16.04.2017, 06:13 9
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
 
/* mc = meetings_count, s = string, ss = substring */
size_t mc(const char * s, const char * ss) {
    return ( ( s = strstr(s, ss) ) != NULL ) ? 1 + mc(s + 1, ss) : 0;
}
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        printf("%u meetings.\n", mc(buf, "abc"));
    
    return 0;
}
2
16.04.2017, 06:13
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.04.2017, 06:13

Дан символьный файл. Найти в нем слова, в которые буква "a" входит не менее 2х раз (без учета регистра)
Дан символьный файл. Найти в нем слова в которые буква &quot;a&quot; входит не менее 2х раз ( без учета...

Используя указатель, проверить, входит ли в исходную строку комбинация символов "01"
В исходной строке, используя указатель, проверить, входит ли в нее комбинация символов &quot;01&quot;....

Подсчитать общее количество вхождений в строку символов "А", "a", "B" и "b"
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; main() { int i; int k; ...


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

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

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