Определить количество слов, которые слева и справа читаются одинаково (палиндромов) во введенной строке - 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. Подключение необходимых библиотек для работы со строками и вводом/выводом
  2. Функция проверки палиндрома, принимает строку в качестве параметра и возвращает 1, если палиндром, иначе 0
  3. Ввод строки с помощью функции gets_s
  4. Приведение строки к типу OEM с помощью функции OemToChar
  5. Разделение строки на слова с помощью функции strtok_s, первое слово будет указано в переменной t
  6. Проверка каждого слова на палиндром с помощью функции check и вывод результата на экран
  7. При каждой итерации цикла переменная t будет указывать на следующее слово в строке
  8. В конце программы выводится количество найденных палиндромов с помощью переменной y
  9. Программа завершается с помощью функции _getch

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы