Написать код - C (СИ)
Формулировка задачи:
Ввести фамилию, имя и отчество как одно текстовое данное. Определить длину данного и
количество букв "а" в нем. Решить задачу двумя способами:
а) используя функции из библиотеки string.h;
б) рассматривая введенный текст как массив символов.
Вывести фамилию и количество букв в имени.
Решение задачи: «Написать код»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 80
#define DELIM " ,.?! "
void withoutString(char* );
void fast(char* );
int main()
{
char str[N];
int i = 0, len = 0, count = 0, n;
system("chcp 1251 > nul");
puts("KushnyrukMariaViktorivna:");
while((str[i] = getchar()) != '\n'){
len++;
if(str[i] == 'а' || str[i] == 'А')
count++;
i++;
}
str[i] = '\0';
printf("%d %d\n \'a\'\n", len, count);
puts("1");
while(1 != scanf("%d", &n) || (n != 1 && n != 2)){
puts("Неправильный ввод данных!Попробуйте снова.");
getchar();
}
if(n == 2)
withoutString(str);
if(n == 1)
fast(str);
return 0;
}
void withoutString(char* p)
{
char delim[] = " \t\n,.?!;:", *first, *last;
int j, flag = 0, sym = 1, count = 0;
for(count = 0; *p; p++, sym = 1){
for(j = 0; delim[j]; j++)
if(*p == delim[j])
sym = 0;
if(sym){
if(!flag){
first = p;
flag = 1;
}
}
else{
if(flag){
last = p;
flag = 0;
if(!count){
puts("Kushnyruk:");
while(first < last)
putchar(*first++);
putchar('\n');
}
if(count == 1){
printf("%d n", last - first);
exit(0);
}
count++;
}
}
}
}
void fast(char* str)
{
char* p;
int count;
for(p = strtok(str, DELIM), count = 0; p; p = strtok(NULL, DELIM), count++){
if(!count)
printf("\nKushnyruk: %s", p);
else{
printf("%d %d\n", strlen(p));
exit(0);
}
}
}
Объяснение кода листинга программы
- Ввод строки с помощью функции getchar() до тех пор, пока не будет введен символ новой строки.
- Вычисление длины строки и количества вхождений символов 'а' и 'А'.
- Вывод результатов на экран.
- Ввод числа от 1 до 2 с помощью функции scanf().
- Если введено 1, то вызывается функция withoutString(), если 2 - функция fast().
- Функция withoutString() принимает строку и разделяет ее на подстроки, используя в качестве разделителя пробел, таб, новую строку, запятую, точку, восклицательный и вопросительный знаки.
- Результат выводится на экран.
- Функция fast() принимает строку и разделяет ее на подстроки с помощью функции strtok().
- Результат выводится на экран.