关闭

UVA 10815 Andy's First Dictionary

478人阅读 评论(0) 收藏 举报
分类:

题目意思比较简单,就是输入一些句子,将句子中的单词全部转化成小写字母,然后找出其中的单词并且按照字典序输出。

一看到这个题目,我就想到,用STL里面的map啊!然后就用了。。第一次交WA了。百思不得其解。。。实在想不出来到底什么地方错了,到网上找题解,发现都是用qsort来写的,找了半天也没找到一个map的。然后我没办法了,回去看,然后发现自己的输出里面第一个竟然是空格!!!我以为是输入原因,刚开始没在意。然后找了别人的代码,一验证果然是应该没有空格的!于是我尝试输入两个空格,发现果然有问题。= =,然后就改动了一下。果然,自己刚开始没考虑周全,连样例都没过。。。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<ctype.h>
#include<map>
using namespace std;
char str[202],s[202];
map<string,int>mp;
int main()
{
	mp.clear();
	int i,j,k,l,t,index=0;
   	while(gets(str))
   	{
   		
   		j=0;
	   	l=strlen(str);
	   	for(i=0;i<=l;i++)
	   	{
	   		
	   		if(isalpha(str[i]))s[j++]=str[i];
	   		else if(j>0){        //刚开始没加j>0这个条件,导致如果出现连续的空格或者非字母的字符,就会出现非字母的字符串到map中去。
                                     s[j]='\0';
		   	
		   		for(k=0;k<j;k++)
		   		{
		   			if(s[k]>='A'&&s[k]<='Z')s[k]=s[k]+32;
		   		}
				  
				   if(!mp[s]){mp[s]=index++;    //其实我刚开始把j>0放在这里,发现不能解决问题。也不是很清楚什么原因。
				  }
				   j=0;
		   	}
	   	}
	   	 
	   }
	 // printf("%d\n",index);
	  map<string,int>::iterator it;
	   for(it=mp.begin();it!=mp.end();it++)
	   cout<<it->first<<endl;
	   
	   return 0;
}
 

其实呢,我看了一大堆qsort的结题报告以后,发现了一个用set解的结题报告。然后就去了解了一下Set(其实以前学过,没用过所以忘记了= = )。

set是一个集合,可以插入多个元素,并且把重复元素筛选掉,同时可以进行排序。

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<ctype.h>
#include<set>
using namespace std;
char str[202],s[202];
set<string>st;
int main()
{
	st.clear();
	int i,j,k,l,t,index=0;
   	while(gets(str))
   	{
   		
   		j=0;
	   	l=strlen(str);
	   	for(i=0;i<=l;i++)
	   	{
	   		
	   		if(isalpha(str[i]))s[j++]=str[i];
	   		else if(j>0){
	   			s[j]='\0';
		   	
		   		for(k=0;k<j;k++)
		   		{
		   			if(s[k]>='A'&&s[k]<='Z')s[k]=s[k]+32;
		   		}
				  
				   st.insert(s); 
				   j=0;
				  
				  
		   	}
	   	}
	   	 
	   }
	 // printf("%d\n",index);
	  set<string>::iterator it;
	   for(it=st.begin();it!=st.end();it++)
	   cout<<*it<<endl;
	   
	   return 0;
}

前面用了STL的容器,后面还是用qsort试了下。我记得好像以前是做过几道qsort的题目,只记得qsort功能十分强大!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
char str[210],s[100010][201];
int cmp(const void* _a,const void* _b)
{
	char* a=(char*)_a;
	char* b=(char*)_b;
	return strcmp(a,b);
}
int main()
{
	int i,j=0,k=0,l;
	while(gets(str))
	{
		l=strlen(str);
		for(i=0;i<=l;i++)
		{
			if(isalpha(str[i]))s[j][k++]=tolower(str[i]);
			else if(k>0){
				s[j][k]='\0';
				j++;
				k=0;
			}
		}
	
	}

		qsort(s,j,sizeof(s[0]),cmp);	
		printf("%s\n",s[0]);
		for(i=1;i<j;i++)
    	if(strcmp(s[i],s[i-1])==0)continue;
		else
		printf("%s\n",s[i]);
}

其中qsort里面的cmp函数是精华。

int cmp(const void* _a,const void* _b)     
{
	char* a=(char*)_a;    //强制转换类型
	char* b=(char*)_b;
	return strcmp(a,b);
}

其实我并不是很清楚这里const的用法,只知道这里的意思是定义了_a的指针是一个常量。也只能先这样了。


0
0
查看评论

Andy's First Dictionary(uva 10815) set用法

Andy's First Dictionary Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID: 10815 64-bit inte...
  • hnust_taoshiqian
  • hnust_taoshiqian
  • 2015-02-03 13:46
  • 843

uva 10815 Andy's First Dictionary(字符串处理+sort排序)

Problem B: Andy's First Dictionary Time limit: 3 seconds Andy, 8, has a dream - he wants to produce his very own dictionary. This is no...
  • u011328934
  • u011328934
  • 2013-07-25 00:09
  • 1661

UVa 10815 - Andy's First Dictionary

题目:统计单词。 分析:字符串处理、字典树。比较裸的字典树,建树输出即可。 注意:库iostream中没有gets。万恶的CE,╮(╯▽╰)╭。 #include #include #include #include using namespace std; //Trie typede...
  • mobius_strip
  • mobius_strip
  • 2013-10-10 17:56
  • 1632

Set操作UVa 10815Andy's First Dictionary

Set操作以及stringstream 汝佳p112 输入一个文本,找出所有不同的单词(连续的字母序列),按字母序从小到大输出,单词不区分大小写。 Sample Input Adventures in DisneylandTwo blondes were going to Disneylan...
  • Joovo
  • Joovo
  • 2016-12-06 00:46
  • 183

uva 10815 Andy's First Dictionary

字符串加集合应用,注意读数据的结束判断和用scanf不同,应该是gets(buffer)!=NULL这样。 #include #include #include #include #include #include using namespace std; char buffer...
  • xiaohaowudi
  • xiaohaowudi
  • 2013-09-19 23:04
  • 294

UVA 10815 - Andy's First Dictionary(字符串)

Andy's First Dictionary Time limit: 3 seconds Andy, 8, has a dream - he wants to produce his very own dictionary. This is ...
  • coco430
  • coco430
  • 2013-07-24 09:52
  • 342

F - UVA 10815 Andy's First Dictionary

题意:将一大段字符串,分解单词(不重复),然后排序逐个输出题解思路:简单的字符串排序,储存。AC代码:#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;ctype.h&amp;gt;#include &amp;l...
  • qq_39570759
  • qq_39570759
  • 2018-02-14 17:18
  • 10

UVA 10815 Andy's First Dictionary(字符处理)

Andy, 8, has a dream - he wants to produce his very own dictionary. This is not an easy task for him, as the number of words that he knows is, well, n...
  • u013582254
  • u013582254
  • 2014-11-08 03:34
  • 1191

小白书训练-Andy's First Dictionary

题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1756 题意:给你一段文字,把所有的单词挑出来,然后排序打印、 首先是...
  • u012943138
  • u012943138
  • 2014-12-01 18:16
  • 901

10815 Andy's First Dictionary

这道题稀里糊涂弄了一晚上,提交了好多次,最后终于ac了。。  总结::心细心细再心细,第一次输代码是就一定要想全面,不然会浪费大量时间调试,而且对耐心也有很大的挑战 总结易错点: 1、数组一开始开小了  开始  #define N 5000  R 200,...
  • hao5743
  • hao5743
  • 2011-11-26 18:56
  • 305
    个人资料
    • 访问:113391次
    • 积分:3386
    • 等级:
    • 排名:第11792名
    • 原创:235篇
    • 转载:2篇
    • 译文:0篇
    • 评论:9条
    最新评论