Определить число вхождений групп букв в последовательность (Си)
Моё решение:
#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();
}
Посмотрите пожалуйста, может что не так или можно что-нибудь улучшить.
#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
Посмотрите пожалуйста, может что не так или можно что-нибудь улучшить.
Ну, навскидку, учитывая размер и одно вхождение каждого символа (abc)
можно,к примеру, после удачной проверки прыгать сразу на 3 позиции.
В коде вверху предложено еще несколько мелочей.
Можно поиздеваться над 32 битным long и сравнивать сразу все 3 символа
одним махом, как сделано ниже
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);
}
{
if (str=='a'&&str[b+1]=='b'&&str[b+2]=='c')
{
a++;
b+=3;
}
}
Вместо b+=3; надо b+=2; т.к. потом в цикле(в теле for) по любому инкремент b на единицу будет.
а второй вариант решения извратный, имхо. я вот до того до извращалась при написании своих лаб(было дело), что спустя время, когда надо было повторить матерьял сама себя ругала - тяжело было такой изврат читать, лишнее время, которого по сути не было, приходилось тратить. так это только студентческие лабы, а не проект ... поэтому считаю, что писать надо просто и понятно, по возможности.