所以即时练习STL字符串类,但我无法弄清楚为什么string-> length函数不会得到5的正确答案,只有2(无论实际长度)。这是我正在尝试运行的程序,但它认为只有两个项目 - >开始和 - >结束:
void testFunc(string _string[])
{
int _offset = 0;
string::const_iterator i;
for (i = _string->begin(); i != _string->end(); i++)
{
cout << _offset << "\t";
cout << _string[_offset] << endl;
_offset ++;
}
};
int main()
{
string Hello[] = {"Hi", "Holla", "Eyo", "Whatsup", "Hello"};
testFunc(Hello);
char response;
cin >> response;
return 0;
}
输出结果为:
0 Hi
1 Holla
谢谢! =)
答案 0 :(得分:3)
你正在迭代第一个字符串,这是&#34;嗨&#34; - 它有两个字符,所以你看到两个条目。
如果你想要使用所有STL,你需要一个向量而不是一个C风格的数组(即vector<string>
,并在其上使用迭代器。
如果您不想要STL:
void testFunc(string *strings, int stringCount)
{
int _offset = 0;
while (stringCount--)
{
cout << _offset << "\t";
cout << _strings[_offset] << endl;
_offset ++;
}
};
int main()
{
string Hello[] = {"Hi", "Holla", "Eyo", "Whatsup", "Hello"};
testFunc(Hello, sizeof(Hello) / sizeof(Hello[0]));
char response;
cin >> response;
return 0;
}
答案 1 :(得分:3)
问题在于表达式:
_string->begin()
_string->end()
认为a->b
与(*a).b
相同,我们可以看到它们是:
(*_string).begin()
(*_string).end()
*x
与x[0]
相同,因此我们有:
_string[0].begin()
_string[0].end()
由于_string[0]
包含"Hi"
,您可以看到为什么迭代只有两个步骤。
答案 2 :(得分:0)
问题是你正在尝试迭代一个c数组。