string s =“hello”vs string s [5] = {“hello”}

时间:2015-06-11 06:37:10

标签: c++ string

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
  string s = "hello";
  reverse(begin(s), end(s));
  cout << s << endl;
  return 0;
}

打印olleh

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main() {
  string s[5] = {"hello"};
  reverse(begin(s), end(s));
  cout << *s << endl;
  return 0;
}

打印hello

请帮助我理解为什么会有这样的差异。我是c ++的新手,我使用的是c ++ 11。 好吧,我从s [5] =“你好”纠正了s [5] = {“hello”}。

2 个答案:

答案 0 :(得分:5)

第一个是单个字符串。第二个是五个字符串的数组,并将所有五个字符串初始化为相同的值。但是,允许问题中的语法是一个错误(请参阅T.C.评论中的链接)并且通常应该给出错误。正确的语法将括号内的字符串,例如{ "hello" }

在第二个程序中,你只打印五个中的一个,第一个。取消引用数组时,它会衰减到指针并为您提供指针指向的值,这是数组中的第一个元素。 *ss[0]相同。

答案 1 :(得分:-1)

我认为您正在寻找的是:

int main() {
  char s[] = "hello";
  reverse(s, s + (sizeof(s) - 1));
  cout << string(s) << endl;
  return 0;
}

使用char[6],您有一个C风格的字符串。请记住,这些字符串必须以'\0'终止。因此有第6个元素。