【杭电oj】2072 - 单词数(STL - string & map)

统计文章中不同单词总数
本文介绍了一个简单的程序设计问题,即如何统计一篇文章内不同单词的总数。通过使用字符串操作和映射(map)数据结构,文章详细展示了实现这一功能的具体步骤。

点击打开题目

单词数

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 43983    Accepted Submission(s): 10688


Problem Description
lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。
 

Input
有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。
 

Output
每组只输出一个整数,其单独成行,该整数代表一篇文章里不同单词的总数。
 

Sample Input
  
you are my friend #
 

Sample Output
  
4
 

Author
Lily
 

Source



先在句子最前面和最后面添加空格,然后查找两两空格之间的单词,用map记录。最后统计更新ans值就行了。


代码如下:

#include <cstdio>
#include <string>
#include <cstring>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;
struct vo
{
	int st,endd;
}data[1111];
int main()
{
	string str;
	int num,ans;
	while (getline(cin,str)) 
	{
		if (str == "#")
			break;
		ans = 0;
		num = 0;
		str.insert(0," ");
		str += " ";
//		cout << str << endl;
		int l = str.size();
		for (int i = 0 ; i < l ; i++)		//分离出每一个单词 
		{
			if (str[i] == ' ' && (str[i+1] >= 'a' && str[i+1] <= 'z'))
			{
				for (int j = i + 1 ; j < l ; j++)
				{
					if ((str[j] >= 'a' && str[j] <= 'z') && (str[j+1] == ' '))
					{
						data[num].st = i + 1;
						data[num++].endd = j;
						break;		//查到一个后结束查找 
					}
				}
			}
		}
		map<string,int> ant;
		string t;
		for (int i = 0 ; i < num ; i++)
		{
			t = str.substr(data[i].st,data[i].endd - data[i].st + 1);
			if (ant[t] == 0)		//为0的话更新ans值
				ans++;
			ant[t]++; 
		}
		printf ("%d\n",ans);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值