欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++ primer 习题及答案分享(二)

程序员文章站 2022-05-23 08:46:18
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