Ask Question

Name:
Title:
Your Question:

Answer Question

Name:
Your Answer:
User Submitted Source Code!


Description:
  5htGzuWv
Language: C/C++
Code:
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

char **words;
int words_number;
int palindrom_number;

void init() {
     char answer;
     words = new char*[20];
     for (int i = 0; i < 20; ++i)
     {
          words[i] = new char[20];
     }
     int idx = 0;
     do {
          char *word = new char[20];
          cout << "enter word:n";
          cin >> word;
          words[idx] = word;
          idx++;
          cout << "more? (y/n)n";
          cin >> answer;
     } while (answer != 'n');

     words_number = idx;
}

void print_words(char **words, int num) {
     for (int i = 0; i < num; i++) {
          char *word = words[i];
          cout << word << endl;
     }
}

bool is_palindrom(char *str, size_t len) {
     return len < 2 || (str[0] == str[len - 1] && is_palindrom(str + 1, len - 2));
}

char **get_palindroms(char *words[]) {
     char **palindroms = new char *[20];
     int idx = 0;
     for (int i = 0; i < words_number; i++) {
          char *word = words[i];
          int len = strlen(word);
          if (is_palindrom(word, len)) {
               palindroms[idx] = word;
               idx++;
          }
     }

     palindrom_number = idx;
     return palindroms;
}

unsigned get_max_word_len(char **words) {
     unsigned len = 0;
     for (int i = 0; i < palindrom_number; i++) {
          char *word = words[i];
          unsigned str_len = strlen(word);
          if (str_len > len) {
               len = str_len;
          }
     }

     return len;
}

bool is_vowel(const char c) {

     char vowel[] = { 'a', 'e', 'i', 'o', 'u' };
     char *end = vowel + sizeof(vowel) / sizeof(vowel[0]);
     char *position = std::find(vowel, end, c);
     return (position != end);
}

char *get_vowels(const char *word) {
     char *vowels = new char[20];
     int idx = 0;
     for (int i = 0; i < 20; ++i)
     {
          vowels[i] = '';
     }
     for (int i = 0; i < strlen(word); i++) {
          char c = word[i];
          if (is_vowel(c)) {
               vowels[idx] = c;
               idx++;
          }
     }

     return vowels;
}

int main() {
     init();
     print_words(words, words_number);

     char **palindroms = get_palindroms(words);
     if (palindrom_number > 0) {
          cout << endl << "palindroms: " << endl;
          print_words(palindroms, palindrom_number);

          unsigned len = get_max_word_len(palindroms);
          cout << endl << "The longest palindrom has "
               << len << " characters." << endl;
     }
     else {
          cout << endl << "There is no palindroms in a string!" << endl;

          for (unsigned i = 0; i < words_number; i += 2) {
               char *word = words[i];
               char *vowels = get_vowels(word);

               cout << "Word "" << word << """;
               if (0 == strlen(vowels)) {
                    cout << " hasn't vowels!" << endl;
               }
               else {
                    cout << ", vowels: ";
                    for (int i = 0; i < strlen(vowels); i++) {
                         char vowel = vowels[i];
                         cout << vowel << " ";
                    }
                    cout << endl;
               }
          }
     }
     cout << endl;

     system("pause");
}
     
          
Comments: