Определить количество слов, которые слева и справа читаются одинаково (палиндромов) во введенной строке - C (СИ)
Формулировка задачи:
В общем пытался написать задачу, в которой я ввожу строку и нужно определить количество слов, которые слева и справа читаются одинаково, при этом слова разделены пробелами. Самому сделать не получилось, где то нашёл пример, но проблема в том что мой компилятор (microsoft visual studio 2012) выдаёт ошибки в строке 27: strtok_s - функция не принимает 2 аргументов и слишком мало аргументов в вызове функции. Что это может быть?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
# include <iostream>
int check (char str[])
{
int i,k;
k=strlen(str);
for (i=0;i<k;i++)
if (str[i]!=str[(k-1)-i]) return 0;
return 1;
}
int main(void)
{using namespace std;
setlocale(LC_ALL, "Russian");
char str[80];
char* t;
int y=0;
printf("\n");
printf("\n введите строку \n");
gets_s(str);
t=strtok_s(str," ");
printf("\n");
while (t != NULL) {
if (check(t)==1) {
printf("\n слова : %s",t);
printf(" - палиндромы");
y++;
}
else {
printf("\n слова : %s",t); printf(" - не палиндромы ");
}
t = strtok (NULL, " ");
}
printf("\n\n количество палиндромов= %i",y);
return 0;
}Решение задачи: «Определить количество слов, которые слева и справа читаются одинаково (палиндромов) во введенной строке»
textual
Листинг программы
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
int check (char str[])
{
int i,k;
k=strlen(str);
for(i=0;i<k/2;i++)
if (str[i]!=str[k-1-i])
return 0;
return 1;
}
int main()
{
setlocale(LC_ALL, "Russian");
char str[80];
char* t;
int y=0;
printf("\n введите строку \n");
gets_s(str);
OemToChar(str,str);
char *p;t=strtok_s(str," ",&p);
printf("\n");
while (t != NULL)
{
if (check(t))
{
printf("\n слово: %s - палиндром",t);
y++;
}else
printf("\n слово: %s - не палиндром",t);
t=strtok_s(NULL," ",&p);
}
printf("\n\n количество палиндромов= %i",y);
_getch();
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками и вводом/выводом
- Функция проверки палиндрома, принимает строку в качестве параметра и возвращает 1, если палиндром, иначе 0
- Ввод строки с помощью функции gets_s
- Приведение строки к типу OEM с помощью функции OemToChar
- Разделение строки на слова с помощью функции strtok_s, первое слово будет указано в переменной t
- Проверка каждого слова на палиндром с помощью функции check и вывод результата на экран
- При каждой итерации цикла переменная t будет указывать на следующее слово в строке
- В конце программы выводится количество найденных палиндромов с помощью переменной y
- Программа завершается с помощью функции _getch