C++ primer 习题及答案分享(二)
程序员文章站
2024-02-05 13:18:34
4.26 编写程序从标准输入设备读入一个string类型的字符串。考虑如何编程实现从标准输入设备读入一个C风格字符串。
int main()
{
cout <&l...
4.26 编写程序从标准输入设备读入一个string类型的字符串。考虑如何编程实现从标准输入设备读入一个C风格字符串。
int main() { cout << "C++ style" << endl; string str; cin >> str; cout << str << endl; cout << "C style" << endl; char ch[10]; char *p = ch; while (p != ch + 10){ cin >> *p++; } for (int i = 0; i < sizeof(ch) / sizeof(char); ++i) cout << ch[i] << endl; }
4.28 编写程序从标准输入设备读入的元素数据建立一个int型的vector对象,然后动态创建一个与该vector对象大小一致的数组,把vector对象的所有元素赋值给新数组。
int main() { vector vec; int a; while (cin>>a){ vec.push_back(a); } const int n = vec.size(); int *p = new int[n]; int i = 0; for (vector::iterator iter = vec.begin(); iter != vec.end(); ++iter, ++i){ p[i] = *iter; cout << p[i] << endl; } delete[] p; return 0; }
4.30 编写程序连接两个C风格字符串字面值,把结果存储在一个C风格字符串中。然后再编写程序连接两个string类型字符串,这两个string类型字符串与前面的C风格字符串字面值有相同的内容。
int main() { const char *pc1 = "hello"; const char *pc2 = "world"; char *pc = new char[strlen(pc1) + strlen(pc2) + 1]; char *pd = pc; while (*pc1) { *pc = *pc1; ++pc; ++pc1; } while (*pc2) { *pc = *pc2; ++pc; ++pc2; } *pc = '\0'; string str="Hello"; string str2 = "World"; string str3 = str + str2; cout << str3 << endl; delete[] pd; return 0; }
4.31 编写从标准输入设备读入字符串,并把该串存放在字符数组中。描述你的程序如何处理可变长的输入。提供比拟分配的数组长度长的字符串数据测试你的程序。
int main() { //固定数组元素个数 string str;//for enter the string object const size_t str_size = 10; char ch[str_size + 1]; cout << "Enter the string" << endl; cin >> str; size_t len = str.size(); if (len > str_size){ len = str_size; } strncpy(ch, str.c_str(), len); ch[len + 1] = '\0'; //不固定,动态数组 string str2; cin >> str2; const size_t len_str2 = strlen(str2.c_str()); char *ch1 = new char[len_str2 + 1]; char *ch2 = ch1; for (string::iterator iter = str2.begin(); iter != str2.end(); ++iter,++ch2){ *ch2 = *iter; } *ch2 = '\0'; delete [] ch1; return 0; }
4.32 编写程序用int 型数组初始化vector 对象。
int main() { int a[3] = { 1, 2, 3 }; vector vec(a,a+3); for (vector::iterator iter = vec.begin(); iter != vec.end(); ++iter){ cout << *iter << endl; } return 0; }
4.33编写程序把int型vector复制给int 数组。
int main() { vector vec = { 1, 2, 3 }; int *a=new int[vec.size()]; int *b = a; for (vector::iterator iter = vec.begin(); iter != vec.end(); ++iter, ++b){ *b = *iter; cout << *b << endl; } delete [] a; return 0; }
4.34 编写程序读入一组string类型的数据,并将它们存储在vector中。接着,把该vector对象复制给一个字符指针数组。为vector中的每个元素创建一个新的字符数组,并把该vector元素的数据复制到相应的字符数组中,最后把指向该数组的指针插入字符指针数组。
int main(){ string str; vector V_str; while (cin >> str){ V_str.push_back(str); } char **ch = new char*[V_str.size()]; size_t i(0); int j(0); for (vector::iterator iter = V_str.begin(); iter != V_str.end(); ++iter,++i){ char *c = new char[(*iter).size()+1]; for (j = 0; j < (*iter).size(); ++j){ c[j] = (*iter)[j]; } c[j] = '\0'; ch[i] = c; } for (vector::iterator iter2 = V_str.begin(); iter2 != V_str.end(); ++iter2){ cout << *iter2 << endl; } for (i = 0; i != V_str.size(); ++i){ cout << ch[i] << endl; } for (i = 0; i != V_str.size(); ++i){ delete[] ch[i]; } cout << "Successful!" << endl; delete[]ch; return 0; }
4.35 输出习题4.34中建立的vector 对象和数组的内容。输出数组后,记得释放字符数组。
见4.34
下一篇: C语言实现双向非循环链表(不带头结点)