本文地址:http://www.cnblogs.com/archimedes/p/cpp-primer-chapter4-ans.html,转载请注明源地址。

【习题 4.7】

编写必要的代码将一个数组赋给另一个数组,然后把这段代码改用 vector 实现。 考虑如何将一个 vector 赋给另一个 vector。

用数组实现:

#include <iostream>
using namespace std;
int main( )
{
const size_t size=;
int a1[size]={,,,,};
int a2[size];
for(size_t i=; i<size; ++i)
a2[i]=a1[i];
system("PAUSE");
return ;
}

用vector实现:

#include <iostream>
#include <vector>
using namespace std;
int main( )
{
int a[]={,,,,};
vector<int> vec1(a,a+);
vector<int> vec2;
for(vector<int>::iterator it=vec1.begin(); it!=vec1.end(); ++it)
vec2.push_back(*it);
system("PAUSE");
return ;
}

【习题 4.8】

编写程序判断两个数组是否相等,然后编写一段类似的程序比较两个 vector。

bool judge1(int *a, int *b, int n)
{
for(size_t i=; i<n; i++) {
if(a[i]!=b[i])
return false;
}
return true;
}

比较vector:

bool judge2(vector<int> a, vector<int> b)
{
for(vector<int>::size_type it=; it<a.size(); it++) {
if(a[it]!=b[it])
return false;
}
return true;
}

【习题 4.9】

编写程序定义一个有 10 个 int 型元素的数组,并以其在数组中的位置作为各元素的初值。

#include <iostream>
using namespace std;
int main( )
{
int a[];
for(size_t i=; i<; i++) {
a[i]=i;
cout<<a[i]<<" ";
}
cout<<endl;
system("PAUSE");
return ;
}

【习题 4.14】

编写代码修改指针的值;然后再编写代码修改指针所指对象的值。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main( )
{
int *p;
int a=;
int b=;
p=&a;
cout<<p<<endl;
p=&b;
cout<<p<<endl;
*p=;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
system("PAUSE");
return ;
}

【习题 4.18】

编写程序,使用指针把一个 int 型数组的所有元素设置为 0。

#include <iostream>
using namespace std;
int main( )
{
int a[]={,,,,};
for(int*p=a; p<a+; p++)
*p=;
for(int *p=a; p<a+; p++)
cout<<*p<<endl;
system("PAUSE");
return ;
}

【习题 4.25】

编写程序比较两个 string 类型的字符串,然后编写另一个程序比较两个 C 风格字符串的值。

#include <iostream>
#include <string>
using namespace std;
int main( )
{
string s1,s2;
cout<<"输入两个字符串:\n";
cin>>s1>>s2;
if(s1>s2)
cout<<"\""<<s1<<"\""<<"is bigger than"<<"\""<<s2<<"\""<<endl;
else if(s1>s2)
cout<<"\""<<s2<<"\""<<"is bigger than"<<"\""<<s1<<"\""<<endl;
else
cout<<"thay are equal"<<endl;
system("PAUSE");
return ;
}

比较两个 C 风格字符串:

#include <iostream>
#include <string>
#include <vector>
using namespace std; int main( )
{
const int size=;
char *s1,*s2;
s1=new char[size];
s2=new char[size];
if(s1==NULL || s2==NULL) {
cout<<"No enough memory!"<<endl;
return -;
}
cout<<"Enter two strings:"<<endl;
cin>>s1>>s2;
int result;
result=strcmp(s1,s2);
if(result>)
cout<<"\""<<s1<<"\""<<"is bigger than"<<"\""<<s2<<"\""<<endl;
else if(result<)
cout<<"\""<<s2<<"\""<<"is bigger than"<<"\""<<s1<<"\""<<endl;
else
cout<<"thay are equal"<<endl;
delete []s1;
delete []s2;
system("PAUSE");
return ;
}

【习题 4.28】

编写程序由从标准输入设备读入的元素数据建立一个 int 型 vector 对象,然后动态创建一个与该 vector 对象大小一致的数组,把 vector 对象的所有元素复制给新数组。

#include <iostream>
#include <string>
#include <vector>
using namespace std; int main( )
{
vector<int> vec;
int n;
cout<<"请输入数字:"<<endl;
while(cin>>n)
vec.push_back(n);
int size=vec.size();
int *a=new int[size];
for(vector<int>::size_type i=; i<size; i++) {
a[i]=vec[i];
}
cout<<"符合要求的数组为:";
for(int i=; i<size; i++)
cout<<a[i]<<endl;
delete []a;
system("PAUSE");
return ;
}

【习题 4.30】

编写程序连接两个 C 风格字符串字面值,把结果存储在一个 C 风格字符串中。然后再编写程序连接两个 string 类型字符串,这两个 string 类型字符串与前面 的 C 风格字符串字面值具有相同的内容。

#include <iostream>
#include <cstring>
using namespace std;
int main( )
{
const char *s1="hello ";
const char *s2="world.";
size_t len=strlen(s1)+strlen(s2);
char *res=new char[len+];
strcpy(res,s1);
strcat(res,s2);
cout<<res<<endl;
delete []res;
system("PAUSE");
return ;
}

改进后的代码:

#include <iostream>
#include <string>
using namespace std;
int main( )
{
const string s1("hello ");
const string s2("world.");
string res;
res=s1;
res+=s2;
cout<<res<<endl;
system("PAUSE");
return ;
}

【习题 4.31】

编写程序从标准输入设备读入字符串,并把该串存放在字符数组中。描述你的程序如何处理可变长的输入。提供比你分配的数组长度长的字符串数据测试你的程序。

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main( )
{
string instr;
const size_t size=;
char restr[size];
cout<<"请输入字符串(<="<<size<<"个字符):"<<endl;
cin>>instr;
size_t len=strlen(instr.c_str());
if(len>size) len=size;
strncpy(restr,instr.c_str(),len);
restr[len+]='\0';
return ;
}

【习题 4.32】

编写程序用 int 型数组初始化 vector 对象。

#include<iostream>
#include<vector>
using namespace std;
int main( )
{
const size_t arr_size=;
int int_arr[arr_size];
cout<<"请输入:"<<arr_size<<"个元素:"<<endl;
for(size_t i=; i!=arr_size; i++)
cin>>int_arr[i];
vector<int> ivec(int_arr, int_arr+arr_size);
system("PAUSE");
return ;
}

【习题 4.33】

编写程序把 int 型 vector 复制给 int 型数组。

#include<iostream>
#include<vector>
using namespace std;
int main( )
{
vector<int> ivec;
int n;
cout<<"请输入数字:"<<endl;
while(cin>>n)
ivec.push_back(n);
int *a=new int[ivec.size()];
size_t i=;
for(vector<int>::iterator it=ivec.begin(); it!=ivec.end(); ++it,++i)
a[i]=*it;
delete []a;
system("PAUSE");
return ;
}

【习题 4.34】

编写程序读入一组 string 类型的数据,并将它们存储在 vector 中。接着,把该 vector 对象复制给一个字符指针数组。为 vector 中的每个元素创建一个新的字符数组,并把该 vector 元素的数据复制到相应的字符数组中,最后把指向 该数组的指针插入字符指针数组。

#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
int main( )
{
vector<string> svec;
string str;
cout<<"请输入字符串:"<<endl;
while(cin>>str)
svec.push_back(str);
char **arr = new char*[svec.size()];
size_t i=;
for(vector<string>::iterator it=svec.begin(); it!=svec.end(); it++) {
char *p=new char[(*it).size()+];
strcpy(p, (*it).c_str());
arr[i]=p;
}
for(i=; i!=svec.size(); i++)
delete []arr;
system("PAUSE");
return ;
}

C++primer习题--第4章的更多相关文章

  1. C++primer习题--第1章

    本文地址:http://www.cnblogs.com/archimedes/p/cpp-primer-chapter1-ans.html,转载请注明源地址. [习题 1.3] 编一个程序,在标准输出 ...

  2. C++primer习题--第3章

    本文地址:http://www.cnblogs.com/archimedes/p/cpp-primer-chapter3-ans.html,转载请注明源地址. [习题 2.11]编写程序,要求用户输入 ...

  3. 《C++Primer》第五版习题答案--第一章【学习笔记】

    C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #includ ...

  4. 《C++Primer》第五版习题答案--第二章【学习笔记】

    C++Primer第五版习题解答---第二章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/9 第二章:变量和基本类型 练习2.1: 类 ...

  5. 《python核心编》程课后习题——第三章

    核心编程课后习题——第三章 3-1 由于Python是动态的,解释性的语言,对象的类型和内存都是运行时确定的,所以无需再使用之前对变量名和变量类型进行申明 3-2原因同上,Python的类型检查是在运 ...

  6. C Primer Plus_第6章_循环_编程练习

    1.题略 #include int main(void) { int i; char ch[26]; for (i = 97; i <= (97+25); i++) { ch[i-97] = i ...

  7. C Primer Plus_第5章_运算符、表达式和语句_编程练习

    Practice 1. 输入分钟输出对应的小时和分钟. #include #define MIN_PER_H 60 int main(void) { int mins, hours, minutes; ...

  8. C Primer Plus_第四章_字符串和格式化输入输出_编程练习

    Practice 1.输入名字和姓氏,以"名字,姓氏"的格式输出打印. #include int main(void) { char name[20]; char family[2 ...

  9. [C++ Primer Plus] 第10章、对象和类(二)课后习题

    1. bank.h #include <string> using namespace std; class BankAccount { private: std::string m_na ...

随机推荐

  1. poj1562 Oil Deposits(DFS)

    题目链接 http://poj.org/problem?id=1562 题意 输入一个m行n列的棋盘,棋盘上每个位置为'*'或者'@',求'@'的连通块有几个(连通为8连通,即上下左右,两条对角线). ...

  2. PHP实现插入排序

    插入排序思想: 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法. 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描, 找到相应位置并插入.插入排序 ...

  3. 【转载】Picasso源码解析

    原文地址:http://blog.csdn.net/u012702547/article/details/52273918 Picasso是Squareup公司出的一款图片加载框架,能够解决我们在An ...

  4. Python数据类型-列表(list)增删改查

    1.添加元素 添加单个元素:使用append(object)函数可以为列表添加单个元素,参数object为对象:也就是说所有Python的对象都可以添加到列表中. 添加多个元素(合并列表):使用ext ...

  5. 【记录】mysql 无法启动 : NET HELPMSG 3523

    mysql 无法启动 : NET HELPMSG 3523后来注意到mysql 配置文件的格式是 utf-8 还是有bom的utf-8 bom格式前面会多出一些看不见的字符,所以mysql读取配置文件 ...

  6. Codeforces 622 F. The Sum of the k-th Powers

    \(>Codeforces \space 622\ F. The\ Sum\ of\ the\ k-th\ Powers<\) 题目大意 : 给出 \(n, k\),求 \(\sum_{i ...

  7. Shell脚本:“syntax error:unexpected end of file”

    这种错误只能说是坑,如果没有见到过,很可能就要摔里头.解决问题是重要的,但弄明白问题的来源,往往更为重要. 所以要先扯一下,换行和回车的历史遗留问题. 在计算机出现之前,有个玩意叫电传打字机.每秒钟可 ...

  8. bzoj 3809 莫队

    收获: 1.分块时顺便记录每个位置所属的块,然后一次排序就OK了. 2.要权衡在“区间移动”与“查询结果”之间的时间,莫队算法一般区间移动频率远大于查询结果,所以我们选择的辅助数据结构时就要注意了,我 ...

  9. sqlserver -- 学习笔记(二)“SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问”解决方法

    将数据表导出到excel时出现下面错误: SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而 ...

  10. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) A. Little Artem and Presents 水题

    A. Little Artem and Presents 题目连接: http://www.codeforces.com/contest/669/problem/A Description Littl ...