Вывести слова в кавычках - C (СИ)
Формулировка задачи:
Здравствуйте, как вывести слова в кавычках на С?
у меня, почему-то, этот код не работает:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[80], k[2];
k[0] = """;
char *Ptr;
int n= 0;
puts("Vvedit slova: ");
gets(str);
while ((Ptr = strtok(NULL, ",")) != NULL)
{
if (Ptr[0] == k[0])
n++;
}
printf( "Sliv s kavuchami: %i ", n);
return 0;
}Решение задачи: «Вывести слова в кавычках»
textual
Листинг программы
#include <stdio.h>
#define DETECT 0
#define FILL 1
void out_words_quote(FILE* _out, FILE* _in, int q){
char s[128];
int c, i = 0, m = 0;
while(((c = fgetc(_in)) != EOF) && !ferror(_in)){
if((c == '\n') || (c == '\r'))
break;
if(m == DETECT){
if(c == q){
m = FILL;
i = 0;
}
} else if(m == FILL){
if(c == q){
m = DETECT;
s[i] = '\0';
fprintf(_out, "%s\n", s);
} else if(i < 127)
s[i++] = (char)c;
}
}
}
int main(void){
out_words_quote(stdout, stdin, '"');
return 0;
}
Объяснение кода листинга программы
В этом коде выполняется задача по выводу слов в кавычках.
- В первой строке подключается стандартная библиотека для работы с файлами и вывода данных.
- Далее, с помощью препроцессорных директив #define, определяются две константы: DETECT и FILL, которые будут использоваться в коде для определения режимов работы программы.
- Создается функция out_words_quote, которая принимает три аргумента: файловый дескриптор для вывода данных, файловый дескриптор для чтения данных и флаг, определяющий, должны ли слова быть выведены в кавычках.
- Внутри функции создается массив s, который будет использоваться для хранения строки, а также две переменные c, i и m, которые используются для контроля за процессом чтения и записи данных.
- В цикле while считываются данные из файла, при условии, что файл не пуст и нет ошибок при чтении.
- Внутри цикла проверяется, является ли текущий символ символом новой строки или символом возврата каретки. Если это так, то цикл прерывается.
- Далее, проверяется, находится ли переменная m в режиме DETECT. Если это так, то проверяется, равен ли текущий символ символу кавычки. Если это так, то переменная m переводится в режим FILL, переменная i сбрасывается в ноль и текущая строка выводится на экран.
- Если переменная m находится в режиме FILL, то проверяется, равен ли текущий символ символу кавычки. Если это так, то переменная m переводится в режим DETECT, текущий символ добавляется в строку s и переменная i увеличивается на единицу.
- Если текущий символ не является символом кавычки, то он добавляется в строку s, а переменная i увеличивается на единицу.
- В конце функции, после завершения цикла, возвращается ноль, что означает успешное выполнение функции.
- В функции main вызывается функция out_words_quote, передавая ей в качестве аргументов файловый дескриптор stdout (для вывода данных на экран), файловый дескриптор stdin (для чтения данных с экрана) и символ '`' (для вывода слов в кавычках).
- В конце функции main возвращается ноль, что означает успешное выполнение программы.