C++PRIMER第三章课后练习

来源:互联网 发布:全美测评软件系统 编辑:程序博客网 时间:2024/04/27 15:08

代码开头为减少字符省略了~

#include<iostream>

#include<string>

#include<vector>

using namespace std;

3.2

string s;

整行:getline(cin,s)

一个词:cin>>s;

3.3

输入运算符跳过开头的空白,直到遇到下一个空白为止;

getline函数全部读取,直到遇到分界符为止(丢弃分界符),比如换行符为分界符的时候读取整行,最后个换行符丢弃~~

3.4

int main()

{

string s1,s2;

cin>>s1>>s2;

if(s1==s2)

cout<<s1<<s2;

else if(s1>s2)

cout<<s1;

else 

cout<<s2;

return 0;

}

int main()

{

string s1,s2;

cin>>s1>>s2;

if(s1.size()==s2.size())

cout<<s1<<s2;

else if(s1.size()>s2.size())

cout<<s1;

else 

cout<<s2;

return 0;

}

3.5

int main()
{
string s, result;
while (cin >> s)
result += s;//result+=s+" ";
cout << result;
return 0;
}

3.6

int main()

{

       string s("C++");
for (char &c : s)
c = 'X';
cout << s;
return 0;

}

3.7

不会改变原始字符串什么.

3.8

a)string::size_type i=0;

while(s[i])

s[i++]='X';


b)

for(string::size_type i=0;s[i];++i)

s[i]='X';

感觉都还好...


3.9

不合法,s是空字符串,越界了

3.10

int main()
{
string s;
cin >> s;
for (char c : s)
if (!ispunct(c))
cout << c;
return 0;
}

3.11

合法,const char&,语句块里不允许修改C的值

3.12

a)正确,创建了元素为vector<int>的vector对象

b)错误,类型不匹配

c)正确,创建了包含10个"null"的vector对象

3.13

a)0个             b)10个0

c)10个42      d)一个元素10

e)2个元素,10和42  f)10个空字符串

g)10个"hi"

3.14

int main()
{
vector<int> vec;
int i;
while (cin >> i)
vec.push_back(i);
return 0;
}

3.15

int main()
{
vector<string> vec;
string s;
while (cin >> s)
vec.push_back(s);
return 0;
}

3.17

int main()
{
vector<string> vec;
string s;
while (cin >> s)
{
for (char&c : s)
c = toupper(c);
vec.push_back(s);
}
for (const string outs : vec)
cout << outs << endl;
return 0;
}

3.18 

不合法,下标越界

vector<int> ivec;

ivec.push_back(42);

3.19

vector<int> vec1(10,42);

vector<int> vec2{42,42,42,42,42,42,42,42,42,42};

vector<int> vec3(vec1);

第一种最好,简单直接明了

3.20

int main()
{
vector<int> ivec;
int val;
for (int i = 0; i < 9; ++i)
{
cin >> val;
ivec.push_back(val);
}
for (int i = 0; i < 8; ++i)
cout << ivec[i] + ivec[i + 1] << ",";  //第一段
cout << endl;
for (auto it1 = ivec.begin(), it2 = ivec.end()-1; it1 - it2 < 0; ++it1, --it2) //第二段
cout << *it1 + *it2 << ",";
return 0;
}


3.22

for(auto it=text.begin();it!=text.end()&&!it->empty();++it)

for(char &c:*it)

cout<<toupper(c);

3.23

int main()
{
vector<int> ivec{ 0,1,2,3,4,5,6,7,8,9 };
for (auto it = ivec.begin(); it != ivec.end(); ++it)
*it *= 2;
for (auto i : ivec)
cout << i << ",";
return 0;
}

3.26

迭代器相加没有意义

3.27

a)非法,数组维度必须是个常量表达式

b) 合法

c)非法

d)非法,没有空间存放空字符;

3.28

sa是10个空字符串;ia是10个0;sa2是10个空字符串,ia2是10个不确定的数;

3.29

不灵活,无法改变大小,并不能随意向数组中增加元素

3.30

越界,,<=改成<

3.31

int main()

{

int a[10];

for(int i=0;i<10;++i)

a[i]=i;

return 0;

}

3.33

在函数体内定义未初始化内置unsigned,值将不确定


3.34

令p1=p2;只要p1,p2合法且指向同一数组,这个程序永远合法

3.37

输出hello

3.38

指针指的是对象的地址,2个地址相加没有意义,指向哪里都不知道了

3.41

vector<int> vec(begin(a),end(a));


原创粉丝点击