Проверьте код,выдает ошибки,а как исправить их не могу - C (СИ)
Формулировка задачи:
Суть в том,что надо проверь слова из строки на условия:
1)начало и конец слова начинается на одну и ту же букву
2)слово содержит 3 буквы к
ошибки:
1) [Error] request for member 'length' in 'p', which is of non-class type 'char*'
2 )26строка expected primary-expression before 'int'
3)26строка expected ')' before 'int'
4) 30строка expected ')' before 'p'
5)30строка expected ')' before ';' token
Листинг программы
- #include <iostream>
- #include <string>
- #include <sstream>
- #include <string.h>
- #include <stdio.h>
- int cnt(char text,char ch)
- {
- int res = 0;
- for (; text; ++text) {
- res += (text == 'k');
- }
- return res;
- }
- int main()
- {
- char text[256], *p;
- fgets(text, sizeof(text), stdin);
- p = strtok(text, " ");
- while (p)
- {
- if ((p[0] == p[p.length()-1]) && (3==(int cnt(text,'k'))))
- {
- printf("%s\n", p);
- }
- p = strtok(NULL, " ");
- }
- return 0;
- }
Решение задачи: «Проверьте код,выдает ошибки,а как исправить их не могу»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #define LENGTH 256
- #define DELIM " ,.?!\n"
- int coincidences(char *, char);
- int identical(char *);
- int main(void)
- {
- char* str = (char *)malloc( sizeof(char) * LENGTH );
- printf("Enter a string: ");
- fgets(str, LENGTH, stdin);
- char letter;
- printf("Enter a character we will find: ");
- scanf("%c", &letter);
- char* word = strtok(str, DELIM);
- while(word)
- {
- if (coincidences(word, letter) == 3)
- if (identical(word))
- printf ("%s\n", word);
- word = strtok(NULL, DELIM);
- }
- return 0;
- }
- int coincidences(char* str, char letter)
- /*
- Ищет кол-во одинаковых букв (letter) в слове (str)
- Возвращает кол-во совпадений
- */
- {
- if (!str) return 0;
- int count = 0;
- while (*str)
- if (*str++ == letter) ++count;
- return count;
- }
- int identical(char* str)
- // Проверяет, начинается ли слово на букву, на которую заканчивается
- {
- if (!str) return 0;
- if (!*str) return 0;
- if ( !*(str + 1) ) return 0;
- char firstLetter = *str;
- while (*++str);
- if ( tolower(*--str) == tolower(firstLetter) ) return 1;
- return 0;
- }
Объяснение кода листинга программы
- Включаются заголовочные файлы stdio.h и stdlib.h.
- Определяются две константы: LENGTH (256) - максимальная длина строки, и DELIM (
, .?!\n
) - разделитель, используемый при разбиении строки на слова. - Определены две функции: coincidences (поиск совпадений) и identical (проверка на идентичность).
- В функции main() выделяется память под строку str, и затем считывается строка из стандартного ввода.
- Вводится символ, который нужно найти в строке.
- Строка разбивается на слова с использованием функции strtok().
- Для каждого слова проверяется, содержит ли оно три совпадения с искомым символом, и если да, то проверяется, является ли слово идентичным (начинается ли на ту же букву, на которую заканчивается).
- Если слово удовлетворяет обоим условиям, оно выводится на экран.
- В функции coincidences() ищется количество одинаковых букв в слове.
- В функции identical() проверяется, начинается ли слово на букву, на которую заканчивается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д