c++ prime 第三章 字符串练习题答案

c++ prime 第三章 字符串、向量和数组练习题答案
第三章 字符串

  • 3.6 使用范围for语句将字符串内的所有字符用X代替。
#include 
#include 
#include 

using std::cout;
using std::cin;
using std::endl;
using std::string;

int main()
{

	string str = "some string";

	for (auto &s : str)
		if (isalpha(s))
			s = 'x';
	
	cout << str << endl;

	return 0;
}
  • 3.7如果将循环控制变量的类型设为char将发生什么?
改为char后结果不变,因为string表示可变长字符序列,范围for每次迭代都是一个字符
  • 3.8 用while循环和传统for循环重写3.6程序
while循环
#include 
#include 
#include 

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main()
{
	string str("some string");
	string::size_type index = 0;

	if (!str.empty())
	{
		while (index != str.size())
		{
			if (isspace(str[index]))
			{
				index++;
				continue;
			}
			str[index] = 'x';
			index++;
		}
		cout << str << endl;
	} else {
		std::cerr << "字符串为空" << endl;
	}

	return 0;
}
传统for循环
#include 
#include 
#include 

using std::cout;
using std::cin;
using std::endl;
using std::string;

int main()
{

	string str = "some string";

	for (string::size_type s = 0; str.size() > s; s++ )
		if (isalpha(str[s]))
			str[s] = 'x';

	cout << str << endl;

	return 0;
}

范围for语句更简洁好用

  • 3.9下面程序有何作用?它合法吗?如果不合法,为什么?
#include 
#include 

int main() 
{
	std::string s;
	std::cout << s[0] << std::endl;

	return 0;
}

程序的作用:定义一个字符串s 输出s的第一个字符。
程序不会报错,但不合法,s是一个空字符串。

  • 3.10 读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。
#include 
#include 
#include 

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main()
{
	string str("some string");
	cin >> str;

	// 循环str
	for (string::size_type s = 0; s < str.size(); s++ )
	{	
		// str 不可打印时退出循环
		if (!isprint(str[s])) break;

		if (ispunct(str[s]))
		{
			for (auto i = s; i < str.size(); i++)
			{
				// 不可打印时退出
				if (!isprint(str[s])) break;
				str[i] = str[i+1];
			}
		}

	}

	cout << str << endl;
		

	return 0;
}
  • 3.11 下面的范围for语句合法吗?如果合法,c的类型是什么?
const string s = "Keep out";
for (auto &c : s) { /* ... */ };

合法c的类型为 char;
如果修改c的值,不合法

你可能感兴趣的:(c++,prime,练习题答案)