ошибка: переменная или поле 'Палиндром' объявлено пустым в C ++ - PullRequest
0 голосов
/ 07 июля 2019

Я получаю эту ошибку, поэтому я новичок в c ++. Я не мог понять, пожалуйста, помогите мне !!!

Я пишу код палиндрома. Этот код приведен ниже: .............

Я здесь, в основном, использую некоторые дополнительные понятия, а не непосредственный способ.если кто-то может опубликовать правильный код, он / она приветствуется ...

//palindrome
#include <cstring>  //or use #include <string.h>
#include <iostream>
using namespace std; 

void Palindrom(string& );

void Palindrome(string& word)// same as (const string& word)
{ 
    int n = word.length();
    string word2;
    char reverse[n]; 

 for(int i = 0; i <=n; i++){
        word[i]=tolower(word[i]);
    }
    word2=word; //now both are small

    for(int i = n-1; i >=0; i--){
        reverse[n-1-i]=word2[i];
        cout<<reverse[n-1-i];
    } 


    for(int i =0; i >n; i++){    //printing reversed 
        cout<< " Reverse:  "<<reverse[i]<<endl;
    } 


    // word is ok and word2 gets reversed  

    for (int i = 0; i <= n; i++){ 
       if(word[i]==reverse[i])
       {
           cout<<"\nit is palandrome ";

       }
    cout<<"\nit is not a palindrome ";
    }
}

int main()
{  string k="YuUuy";
   void Palindrome(k);
   return 0;
}

Ответы [ 2 ]

4 голосов
/ 07 июля 2019

Правильный синтаксис для вызова функции: Palindrome(k); без void.

Несколько замечаний:

  • Получить хорошую книгу на С ++ .
  • // same as (const string& word) не соответствует действительности.

  • Вы не включили заголовок <string>.

  • Рекомендуется использовать std::size_t для индексов, но следует помнить, что unsigned>=0 условие всегда истинно.
  • char reverse[n]; неверно, n должно быть константой времени компиляции, VLA не является частью стандарта C ++.
2 голосов
/ 07 июля 2019

У вызовов функций не должно быть типа возврата. Измените void Palindrome(k); в функции main () на Palindrome(k);

При объявлении массива выражение должно иметь постоянное значение. Так что вы не можете использовать char reverse[n];. Измените его на char *reverse = new char[n]; и освободите его, используя delete[] reverse; после того, как вы его закончили.

Я бы порекомендовал вам использовать умный указатель. Вы также должны взглянуть на std::string вместо использования потока char.

...