C++Primer第五版 第三章习题答案(1~10)

来源:互联网 发布:手机切换软件不掉线 编辑:程序博客网 时间:2024/04/28 18:47
第三章
3.1:
知识点:using声明命名空间。注意的是头文件中不应该包含using声明,因为在引用头文件时,会将头文件中的内容拷贝到文件中来,如果头文件中包含了using声明,那么可能每一个头文件中都会包含using声明,可能会造成名字的冲突。

常加:using namespace  std ;(将标准库声明)

3.2
知识点:读入一整行和读入一个词主要的差别可以用getline()函数来实现。使用方法:getline(cin , stringname)

#include <iostream>#include <string>using namespace std;void main(){string mystring;while (getline(cin , mystring)){cout<<mystring<<endl;}}
一次读入一整行

#include <iostream>#include <string>using namespace std;void main(){string mystring;while (cin>>mystring){cout<<mystring<<endl;}}
一次读入一个词

3.3
对于string类的输入函数,它会自动忽略开头的空白(空格、制表符、换行等等),从第一个真正的字符开始直到下一个空白。

对于getline()函数,它会保存字符串中的空白符,它读入数据,直到遇到换行符位置。

3.4
对于字符串的比较:比较的是字符在字典中的顺序 :b>a ,小写字母大于大写字母。

长度比较可以用size()函数。


字符串比较:
#include <iostream>#include <string>using namespace std;void main(){string mystring1 , mystring2;cin>>mystring1>>mystring2;if (mystring1 != mystring2){cout<<(mystring1 >= mystring2 ? mystring1 : mystring2)<<endl;}}

测试:

字符串长度比较:
#include <iostream>#include <string>using namespace std;void main(){string mystring1 , mystring2;cin>>mystring1>>mystring2;if (mystring1.size() != mystring2.size()){cout<<(mystring1.size() >= mystring2.size() ? mystring1 : mystring2)<<endl;}else{cout<<"The length of these strings are the same!"<<endl;}}

测试结果:


3.5
连接字符串直接“+”即可。
#include <iostream>#include <string>using namespace std;void main(){string mystring;string sumstring;while (getline(cin ,mystring)){sumstring += mystring;cout<<sumstring<<endl;}}

分隔开来
#include <iostream>#include <string>using namespace std;void main(){string mystring;string sumstring;while (getline(cin ,mystring)){sumstring = sumstring+mystring+" ";cout<<sumstring<<endl;}}
我这里投机取巧了~

3.6
#include <iostream>#include <string>using namespace std;void main(){string mystring("cdsiao");int num = mystring.size();for (int i=0 ; i<num ; i++){mystring[i] = 'X';}cout<<mystring;}

注意这里书上使用了C++11的新标准:范围FOR语句,是不支持VS2010的,所以我只能用这种比较笨的方法了。

3.7
这里只用char的话也是可以的,因为每一个元素都是char类型的。

3.8
我这里就是用的传统的for循环,感觉还不错~

while的话也可以,但是我们已经知道循环的次数了,最好还是用for比较好。

3.9
不合法,因为字符串S是一个空字符串,第一个元素是未知的,引用非法。

3.10
#include <iostream>#include <string>using namespace std;void main(){string mystring("cdsi4325#@ao");int num = mystring.size();for (int i=0 ; i<num ; i++){ if (!ispunct(mystring[i]))  cout << mystring[i];}}

这里主要使用到了自带的函数:ispunct()判断字符是否为标点符号~


1 0