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()