Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Определить число вхождений групп букв в последовательность (Си)

16K
12 августа 2007 года
Draconit
39 / / 10.08.2007
Задача: Даны натуральное число n, символы s1,...,sn. Определить число вхождений а последовательность s1,...,sn групп букв: abc.

Моё решение:
Код:
#include <conio.h>;
#include <stdio.h>;
char str[255];
int a,b;
void main()
{
clrscr();
puts("Введите последовательность символов");
scanf("%s", str);
a=0;
for (b=0; b<=255; b++)
 {
  if (str=='a'&&str[b+1]=='b'&&str[b+2]=='c') a++;
  if (str=='\0') break;
 }
printf("Число вхождений  abc в последовательность=%i",a);
getch();
}


Посмотрите пожалуйста, может что не так или можно что-нибудь улучшить.
2.0K
12 августа 2007 года
WidowMaker
212 / / 05.04.2005
Цитата: Draconit
Задача: Даны натуральное число n, символы s1,...,sn. Определить число вхождений а последовательность s1,...,sn групп букв: abc.



Код:
#include <conio.h>
#include <stdio.h>

char str[256];
int a,b,len;
void main()
{
clrscr();
puts("Введите последовательность символов");
scanf("%s", str);
a=0;
len=strlen(str)
[color=red]for (b=0; b<=len-3; b++)[/color]
{
  if (str=='a'&&str[b+1]=='b'&&str[b+2]=='c')
  {
    a++;
[color=red]    b+=3;[/color]
  }
}
printf("Число вхождений  abc в последовательность=%i",a);
getch();
}

[COLOR="Red"]Внимательней проверяй код который предоставляешь. len - ? Что это ?[/COLOR]
fixed
Цитата: Draconit

Посмотрите пожалуйста, может что не так или можно что-нибудь улучшить.


Ну, навскидку, учитывая размер и одно вхождение каждого символа (abc)
можно,к примеру, после удачной проверки прыгать сразу на 3 позиции.
В коде вверху предложено еще несколько мелочей.
Можно поиздеваться над 32 битным long и сравнивать сразу все 3 символа
одним махом, как сделано ниже

Код:
#include <stdio.h>

void main()
{
    char str[256];
    int i=0,num=0,len=0;
    scanf("%s",str);
    len=strlen(str);
    for(i=0; i<=len-3; i++)
        if( (*((long*)(str+i)) & 0x00FFFFFF)==0x636261L)[color=green]//код abc[/color]
        {
            i+=3;
            num++:
        }
    printf("Число вхождений  abc в последовательность=%i",num);
}
242
12 августа 2007 года
Оlga
2.2K / / 04.02.2006
WidowMaker
Цитата:

 
Код:
for (b=0; b<=len-3; b++)
{
  if (str=='a'&&str[b+1]=='b'&&str[b+2]=='c')
  {
    a++;
    b+=3;
  }
}

Вместо b+=3; надо b+=2; т.к. потом в цикле(в теле for) по любому инкремент b на единицу будет.

а второй вариант решения извратный, имхо. я вот до того до извращалась при написании своих лаб(было дело), что спустя время, когда надо было повторить матерьял сама себя ругала - тяжело было такой изврат читать, лишнее время, которого по сути не было, приходилось тратить. так это только студентческие лабы, а не проект ... поэтому считаю, что писать надо просто и понятно, по возможности.

16K
13 августа 2007 года
Draconit
39 / / 10.08.2007
to WidowMaker len - это длина вводимой строки:) спасибо:) так действительно лучше:)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог