Это программа, которая находит обратную строку, введенную пользователем, и сообщает, является ли она палиндромом или нет …. теперь проблема заключается в том, что она правильно переворачивает строку, когда в цикле 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;
}
Это потому, что в с & Индексы массива c ++ основаны на 0. То же самое относится и к строковому классу, где при доступе к отдельным символам с помощью оператора [] индекс равен 0 на основе. Длина массива (или размер строки) ВСЕГДА вне его границ.