字符串palindrom在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;

}

回答(1)

3 years ago

那是因为在c&c数组中索引是基于0的 . 对于字符串类也是如此,其中使用[]运算符访问单个字符,索引是基于0的 . 数组的长度(或字符串的大小)总是超出它的范围 .