算法练习(3)——C++ STL练习(2)

题目1:反片语

思路:

由于有了上篇博客题目中的经验,遇到不区分大小写,那就在判断时用临时变量保存调用tolower()函数转变成小写形式的字符串

1.可以写一个函数对每个单词标准化:全部转化为小写字母,然后再对字母排序

2.用map统计标准化每个单词出现的次数,标准化之后题目中能通过字母重排的单词相同

3.保存单词出现次数为1的原单词

4.对保存的单词进行字典排序,然后打印出来

代码实现:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;
//定义关联数组map用于统计每个单词出现的次数
map<string,int> timesOfWord;
//定义一个可变数组用于保存原单词
vector<string> words;
//标准化每个单词
	/*   注意:这个函数的定义不能直接返回引用,因为题目要求最终输出要保留输入中的大小写
	void standardizeWord(string &word)
	 */
//所以我们可以传入引用,在函数内部进行拷贝,然后返回拷贝的string对象
string standardizeWord(const string &word)
{
	//定义变量保存标准化的单词
	string standardWord = word;
	//遍历单词的每个字符,将每个字符转换成小写
	for(unsigned int i=0;i < word.length();i++)
	{
		tolower(standardWord[i]);
	}
	//对单词内的字符进行排序
	sort(standardWord.begin(),standardWord.end());
	return standardWord;
}

int main() {
	//定义一个变量用于保存用户输入的单词    注意:这道题目要求用户输入的是单词,所以除过结束字符'#'和字母字符没有其他字符
	string inputText;
	//执行一次循环cin每次读取多少字符?用什么标识来决定?
	//循环结束的标志:EOF   Unix和Linux:ctrl+D   windows:ctrl+Z和Enter
	//循环读取用户输入的单词
	while(cin >> inputText)
	{
		//遇到用户输入的结束符‘#’就结束循环
		if(inputText[0] == '#')
			break;
		//将单词保
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值