C++ primer plus 第5章 循环和关系表达式

来源:互联网 发布:return of the mac 编辑:程序博客网 时间:2024/05/19 20:42
1. 用strcmp()测试字符串是否相等
  • 如果str1和str2相等,则下列表达式为true
strcmp(str1, str2) == 0
  • 如果str1和str2不相等,则下列表达式为true
strcmp(str1, str2) != 0
strcmp(str1, str2)

2. 循环文本输入
2.1 使用原始cin进行输入
int main()
{
char ch;
int count = 0;

cin >> ch;
while(ch != '#')
{
cout << ch;
count++;
cin>>ch;
}
cout << count;
system("pause");
}
cin将忽略空格和换行符;
发送给cin的输入被缓冲,只有在用户按下enter键后,输入的内容才会发送给程序
2.2 使用cin.get(char)
cin.get(ch)读取输入中的下一个字符,包括空格、制表符、换行符,解决了2.1中cin忽略空格的问题
int main()
{
char ch;
int count = 0;

cin.get(ch);
while(ch != '#')
{
cout << ch;
count++;
cin.get(ch);
}
cout << count;
system("pause");
}
2.3 EOF
检测到文件尾EOF后,cin将eofbit和failbit都设置为1,cin.eof()返回true。如果eof或failbit设置为1,则cin.fail()返回true
int main()
{
char ch;
int count = 0;

cin.get(ch);
while(cin.fail() == false)
{
cout << ch;
count++;
cin.get(ch);
}
cout << count;
system("pause");
}
DOS下以ctrl+Z,Enter结束
2.4 常见的做法
cin.get(ch)返回一个cin对象,cin出现在需要bool值的地方时,istream类提供了将istream对象转换为bool值得函数,因此可简化为
int main()
{
char ch;
int count = 0;

while(cin.get(ch))
{
cout << ch;  // 或cout.put(ch);
count++;
}
cout << count;
system("pause");
}

cin.get()返回输入中的下一个字符(将字符编码作为int值返回)而不是cin对象,ch = cin.get()

2.5 EOF是int类型,所以与EOF做比较需要定义ch为int型,在输出时有时需要强制转换成char
int main()
{
int ch;
int count = 0;

while((ch = cin.get()) != EOF)
{
cout.put((char)ch);
count++;
}
cout << count;
system("pause");
}