fork(3) download
  1. #include <iostream>
  2. #include <cstring>
  3. using namespace std;
  4.  
  5. const int registerShift = 'A' - 'a'; // Сдвиг от верхнего регистра к нижнему по таблице ASCII
  6.  
  7. // Функция, для определния, является ли текущий символ "буквой" в контексте данной задачи
  8. bool IsAllowedSymbol(char symbol) {
  9. return ((symbol >= '1' && symbol <= '9') || (symbol >= 'a' && symbol <= 'z') || (symbol >= 'A' && symbol <= 'Z')) ? true : false;
  10. }
  11.  
  12. // Функция, для определения, является ли текущее слово палиндромом
  13. bool IsPalindrom(char *word, int begin, int end) {
  14. return (end <= begin) ? true : (word[begin] != word[end]) ? false : IsPalindrom(word, ++begin, --end);
  15. }
  16.  
  17. // Функция, которая переводит все слово в нижний регистр
  18. void ToLowerCase(char *word) {
  19. for (int i = 0; i < strlen(word); i++) {
  20. if (word[i] >= 'A' && word[i] <= 'Z')
  21. word[i] -= registerShift;
  22. }
  23. }
  24.  
  25. int main() {
  26. char word[1001];
  27. int wordSize, maxSize = 0, indexOfPalindrom = 0;
  28. for (int i = 1; cin >> word; i++) {
  29. ToLowerCase(word); // Перевод слова в нижний регистр
  30. if (!IsAllowedSymbol(word[strlen(word) - 1]))
  31. word[strlen(word) - 1] = '\0'; // Не учитывать последний символ слова, если это не "буква" (т. е. знак препинания)
  32. wordSize = strlen(word);
  33. if (wordSize > maxSize) {
  34. if (IsPalindrom(word, 0, wordSize - 1)) {
  35. maxSize = wordSize;
  36. indexOfPalindrom = i;
  37. } // Храним новый максимум и индекс текущего наибольшего палиндрома, если он был найден
  38. }
  39. } // Чтение по словам до конца предложения
  40. cout << indexOfPalindrom;
  41. return 0;
  42. }
Success #stdin #stdout 0s 3460KB
stdin
123321 oro 1234554321?
stdout
3