Проверьте код,выдает ошибки,а как исправить их не могу - 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() проверяется, начинается ли слово на букву, на которую заканчивается.