Определить количество слов, которые слева и справа читаются одинаково (палиндромов) во введенной строке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

В общем пытался написать задачу, в которой я ввожу строку и нужно определить количество слов, которые слева и справа читаются одинаково, при этом слова разделены пробелами. Самому сделать не получилось, где то нашёл пример, но проблема в том что мой компилятор (microsoft visual studio 2012) выдаёт ошибки в строке 27: strtok_s - функция не принимает 2 аргументов и слишком мало аргументов в вызове функции. Что это может быть?
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. # include <iostream>
  5. int check (char str[])
  6. {
  7. int i,k;
  8. k=strlen(str);
  9. for (i=0;i<k;i++)
  10. if (str[i]!=str[(k-1)-i]) return 0;
  11. return 1;
  12. }
  13. int main(void)
  14. {using namespace std;
  15. setlocale(LC_ALL, "Russian");
  16. char str[80];
  17. char* t;
  18. int y=0;
  19. printf("\n");
  20. printf("\n введите строку \n");
  21. gets_s(str);
  22. t=strtok_s(str," ");
  23. printf("\n");
  24. while (t != NULL) {
  25. if (check(t)==1) {
  26. printf("\n слова : %s",t);
  27. printf(" - палиндромы");
  28. y++;
  29. }
  30. else {
  31. printf("\n слова : %s",t); printf(" - не палиндромы ");
  32. }
  33. t = strtok (NULL, " ");
  34. }
  35. printf("\n\n количество палиндромов= %i",y);
  36. return 0;
  37. }

Решение задачи: «Определить количество слов, которые слева и справа читаются одинаково (палиндромов) во введенной строке»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <locale.h>
  3. #include <conio.h>
  4. #include <string.h>
  5. #include <windows.h>
  6. int check (char str[])
  7. {
  8.   int i,k;
  9.   k=strlen(str);
  10.   for(i=0;i<k/2;i++)
  11.      if (str[i]!=str[k-1-i])
  12.            return 0;
  13.   return 1;
  14. }
  15. int main()
  16. {
  17.    setlocale(LC_ALL, "Russian");
  18.    char str[80];
  19.    char* t;
  20.    int y=0;
  21.    printf("\n введите строку \n");
  22.    gets_s(str);
  23.    OemToChar(str,str);
  24.    char *p;t=strtok_s(str," ",&p);
  25.    printf("\n");
  26.    while (t != NULL)
  27.    {
  28.      if (check(t))
  29.      {
  30.         printf("\n слово: %s  - палиндром",t);
  31.         y++;
  32.      }else
  33.         printf("\n слово: %s - не палиндром",t);
  34.      t=strtok_s(NULL," ",&p);
  35.    }
  36.    printf("\n\n количество палиндромов= %i",y);
  37.    _getch();
  38.    return 0;
  39. }

Объяснение кода листинга программы

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы