Строковый палиндром дает неверный ответ на string.size(), но правильный ответ на string.size()-1

Это программа, которая находит обратную строку, введенную пользователем, и сообщает, является ли это палиндромом или нет... теперь проблема в том, что она правильно переворачивает строку, когда в цикле for я инициализирую с помощью size()- 1... но он пропускает один символ, когда я инициализирую с помощью size(). почему это так?

  //palindromee
  #include <iostream>
  using namespace std;
  int main()
  {
   string s;
   string s1;

   cout<<"Enter something:  ";
   cin>>s;
   s1.assign(s);
   int k=0;
   for(int i = s.size()-1  ; i>=0 ; i--)
           //why correct ans reversing on size()-1?
   {       // and wrong ans on size()
        s1[k]=s[i];
        k++;
   }
    cout<<"string s= "<<s;
    cout<<"\nstring s1= "<<s1<<'\n';
    int checker=s.compare(s1);
    if(checker == 0)
    {
        cout<<"\n\npalindrome";
    }
    else cout<<"\n NOT A PALINDROME";
   return 0;

}


person ibadia    schedule 02.07.2015    source источник
comment
почему бы не использовать реверс?   -  person    schedule 02.07.2015
comment
Если у вас есть string s = "abc";, что такое s.size()? Как бы вы получили доступ к последнему символу s?   -  person shuttle87    schedule 02.07.2015


Ответы (1)


Это потому, что индексы массива c и c++ основаны на 0. То же самое относится и к классу строк, где при доступе к отдельным символам с помощью оператора [] индекс основывается на 0. Длина массива (или размер строки) ВСЕГДА выходит за его пределы.

person Amit    schedule 02.07.2015