注册 登录
编程论坛 C++教室

[求助] 本人菜鸟,求助各位一个书上的问题

wxa6687 发布于 2007-08-23 15:15, 496 次点击
#include<iostream>
#include<cstdlib>


using namespace std;
const char* st= "The expense of spirit\n";
int main()
{

int len=0;
while(*st++) ++len;
cout<<len<<st-len-1;
system("pause");

}

程序运行结果输出 1. 22The expense of spirit
为什么一共加起来是22个字符,串中的空格应该不计算在内的呀!
2. 另外请问 st-len-1 是如何对输出 st 定位的。

谢谢指教
4 回复
#2
远去的列车2007-08-23 16:00

空格当然算

#3
wxa66872007-08-24 17:31
请问兄台  空格和空字符有区别吗?     为什么while(*st++)遇空字符值为ture
#4
野比2007-08-24 20:45

你所说的"空字符"指什么? NULL? 空格?

用图解:
你的字符串如下, 用| |括起来的是一个字节, \0是字符串结束的零字节.. 也就是ASCII的0(NULL, 和字符'0'不一样,'0'的ASCII=0x30)

|T|H|E| |E|X|P|E|N|S|E| |O|F| |S|P|I|R|I|T|\n|\0|

st

可见st只有指向最后的\0, *st==0, 此时while(0)才会退出, 否则都是TRUE
另外:
从程序看, 每过一个字节len+1, 那么最后len就是从T到\n的字符串长度, 此时st指向\0, 则st-len-1 指向T

#5
远去的列车2007-08-25 09:12
空格的ASCII码是32,'\0'的ASCII码是0
测试用:
int main()
{
chat a = ' ';
char b = '\0';
cout << (a==b ? "y":"n") << endl;
cout << int(a) << endl << int(b) << endl;
}
1