本文地址: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=5; int a1[size]={0,1,2,3,4}; int a2[size]; for(size_t i=0; i<size; ++i) a2[i]=a1[i]; system("PAUSE"); return 0; }
用vector实现:
#include <iostream> #include <vector> using namespace std; int main( ) { int a[5]={1,2,3,4,5}; vector<int> vec1(a,a+5); vector<int> vec2; for(vector<int>::iterator it=vec1.begin(); it!=vec1.end(); ++it) vec2.push_back(*it); system("PAUSE"); return 0; }
【习题 4.8】
编写程序判断两个数组是否相等,然后编写一段类似的程序比较两个 vector。
bool judge1(int *a, int *b, int n) { for(size_t i=0; 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=0; 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[10]; for(size_t i=0; i<10; i++) { a[i]=i; cout<<a[i]<<" "; } cout<<endl; system("PAUSE"); return 0; }
【习题 4.14】
编写代码修改指针的值;然后再编写代码修改指针所指对象的值。
#include <iostream> #include <string> #include <vector> using namespace std; int main( ) { int *p; int a=1; int b=2; p=&a; cout<<p<<endl; p=&b; cout<<p<<endl; *p=12; cout<<"a="<<a<<endl; cout<<"b="<<b<<endl; system("PAUSE"); return 0; }
【习题 4.18】
编写程序,使用指针把一个 int 型数组的所有元素设置为 0。
#include <iostream> using namespace std; int main( ) { int a[5]={1,2,3,4,5}; for(int*p=a; p<a+5; p++) *p=0; for(int *p=a; p<a+5; p++) cout<<*p<<endl; system("PAUSE"); return 0; }
【习题 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 0; }
比较两个 C 风格字符串:
#include <iostream> #include <string> #include <vector> using namespace std; int main( ) { const int size=80; char *s1,*s2; s1=new char[size]; s2=new char[size]; if(s1==NULL || s2==NULL) { cout<<"No enough memory!"<<endl; return -1; } cout<<"Enter two strings:"<<endl; cin>>s1>>s2; int result; result=strcmp(s1,s2); if(result>0) cout<<"\""<<s1<<"\""<<"is bigger than"<<"\""<<s2<<"\""<<endl; else if(result<0) cout<<"\""<<s2<<"\""<<"is bigger than"<<"\""<<s1<<"\""<<endl; else cout<<"thay are equal"<<endl; delete []s1; delete []s2; system("PAUSE"); return 0; }
【习题 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=0; i<size; i++) { a[i]=vec[i]; } cout<<"符合要求的数组为:"; for(int i=0; i<size; i++) cout<<a[i]<<endl; delete []a; system("PAUSE"); return 0; }
【习题 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+1]; strcpy(res,s1); strcat(res,s2); cout<<res<<endl; delete []res; system("PAUSE"); return 0; }
改进后的代码:
#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 0; }
【习题 4.31】
编写程序从标准输入设备读入字符串,并把该串存放在字符数组中。描述你的程序如何处理可变长的输入。提供比你分配的数组长度长的字符串数据测试你的程序。
#include<iostream> #include<string> #include<cstring> using namespace std; int main( ) { string instr; const size_t size=10; 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+1]=‘\0‘; return 0; }
【习题 4.32】
编写程序用 int 型数组初始化 vector 对象。
#include<iostream> #include<vector> using namespace std; int main( ) { const size_t arr_size=9; int int_arr[arr_size]; cout<<"请输入:"<<arr_size<<"个元素:"<<endl; for(size_t i=0; i!=arr_size; i++) cin>>int_arr[i]; vector<int> ivec(int_arr, int_arr+arr_size); system("PAUSE"); return 0; }
【习题 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=0; for(vector<int>::iterator it=ivec.begin(); it!=ivec.end(); ++it,++i) a[i]=*it; delete []a; system("PAUSE"); return 0; }
【习题 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=0; for(vector<string>::iterator it=svec.begin(); it!=svec.end(); it++) { char *p=new char[(*it).size()+1]; strcpy(p, (*it).c_str()); arr[i]=p; } for(i=0; i!=svec.size(); i++) delete []arr; system("PAUSE"); return 0; }