`
java-mans
  • 浏览: 11414735 次
文章分类
社区版块
存档分类
最新评论

10815 - Andy's First Dictionary未通过

 
阅读更多

收获:

set做存储结构(平衡二叉树),需要调用#include <set>

set<string>::iterator,insert;




//程序有问题!
//思路:折半查找,插入
//收获:set做存储结构(平衡二叉树),set<string>::iterator,insert;
//string::empty(),string重定义后的+号运算
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define wMax 50
char words[5010][wMax];
int num;

void insert(char word[])
{
	int left,right;
	left=0;
	right=num;
	while(left<right)
	{
		int mid=(left+right)/2;
		if(strcmp(words[mid],word)<0)
			left=mid+1;
		else if(strcmp(words[mid],word)>0)
			right=mid-1;
		else
			return;
	}
	if(left>right)//第一种情况处理
	{
		num++;
		strcpy(words[0],word);
		return ;
	}
	if(0==strcmp(words[left],word))
		return;
	if(strcmp(words[left],word)<0)
		left++;
	for(int i=num;i>=left;i--)
		strcpy(words[i+1],words[i]);
	strcpy(words[left],word);
	num++;
}

int main()
{
	//freopen("data.in","r",stdin);
	//freopen("data.out","w",stdout);
	char line[500],word[wMax];
	num=-1;
	while(gets(line))
	{
		int len=strlen(line);
		int j=0;
		memset(word,0,sizeof(word));
		for(int i=0;i<len;i++)
		{
			if(isalpha(line[i]))
				word[j++]=tolower(line[i]);
			else
			{
				if(word[0])
					insert(word);
				j=0;
				memset(word,0,sizeof(word));
			}
		}
		if(word[0])
			insert(word);
	}
	for(int i=0;i<=num;i++)
		printf("%s\n",words[i]);
}

/*通过
#include <iostream>
#include <set>
#include <cctype>
#include <cstdio>
#include <string>

using namespace std;

int main()
{
	string line;
	char ch;
	while((ch=getchar())!=EOF)
	{
		line+=tolower(ch);
	}
	set<string>dic;
	
	for(int i=0;i<line.size();i++)
	{
		string word;
		while(i<line.size() && isalpha(line[i]))
		{word+=line[i];i++;}
		if(!word.empty())
		dic.insert(word);
	}
	for(set<string>::iterator i=dic.begin();i!=dic.end();i++)
		cout<<*i<<endl;
	return 0;
}

*/


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics