C++中关于String的下标用法的一个问题!!!

来源:百度知道 编辑:UC知道 时间:2024/05/31 14:54:51
int main()
{
string s("123456789");

for(string::size_type ix = s.size() - 1; ix >= 0 ; --ix)
{
cout << s[ix] << endl;
}

return 0;
}

想要倒序把字符输出,但为什么这样(string::size_type ix = s.size() - 1; ix >= 0 ; --ix)执行不对???
这样执行后,也能够把字符倒序输出,但是会持续的刷屏,虽然知道是 ix >= 0;惹的祸,但如果用 != 的话(ix != 0),毕竟字符的第【0】号单元也有一个字符,怎样把它输出呢?

我改为(ix != -1)了,这样能够输出s[0]元素,但不知道这样够不够安全、或是有什么漏洞?

string::size_type为unsigned类型,
当ix = 0, 打印出最后一个字符后, 逻辑上ix应该是负数,
但因为它的类型为unsigned, 所以它实际上变成了一个unsingned类型
所能表示的最大正数, 自然出问题.
===========================================
至于如何解决, 加条cout吧:
for(string::size_type ix = s.size() - 1; ix != 0 ; --ix)
{
cout << s[ix] << endl;
}
cout << s[0] << endl;
===========================================
恩,
如果string.size()正好等于static_cast<string::size_type>-1
你的程序什么也不输出.
还涉及到一些其他问题, 在这里我就不详细说了.
加条cout吧, 又不麻烦.

有什么区别吗?