您的位置:首页 > 编程语言 > C语言/C++

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

2016-11-22 14:40 507 查看
第三章
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()判断字符是否为标点符号~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息