7-11 挑单词

输入若干行数据,每行只包含英文字符(不区分大小写)和数字字符,请找出所有的“单词”,这里所说的“单词”指的是长度大于等于3的连续英文字符构成的字符序列,并把找到的“单词”按字母序从大到小排列,若某个单词重复出现,在结果中只输出一次,若没有满足要求的单词,输出“no word"。

输入格式:

第一行给出总行数n,接下来n行给出由英文字符(不区分大小写)和数字字符组成的串,每行中字符数量不超过1000,每行以回车结束。

输出格式:

输出“单词”的降序序列,每个“单词”首字母大写,单词间用一个空格分隔,最后一个单词后没有空格。

输入样例1:

在这里给出一组输入。例如:

1
Hi1123hello2how98are2111119you88
 

 

输出样例1:

在这里给出相应的输出。例如:

You How Hello Are

 

输入样例2:

在这里给出一组输入。例如: 

2
Fine445thank66you
and990you276w
 

 

输出样例2:

在这里给出相应的输出。例如:

You Thank Fine And
 

输入样例3:

在这里给出一组输入。例如:

2
Fe445ak66
an990u276w
 

输出样例3:

在这里给出相应的输出。例如:

no word

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

 

 

#include<stdio.h>
#include<ctype.h>
#include<string.h>

char Word[1000][1000];
int wordquantity = 0;

//对输入的字符串进行单词检查
void Wordcheck(char* str)
{
	int flag = 0;//判断单词是否出现过
	int i;
	char word[1100];//暂时存放满足要求的单个单词
	int lenth = 0;//连续英文字符串长度
	char* p = NULL;
	char* q = NULL;//前进指针
	p = str;
	q = p;

	//双指针
	while (q != NULL)
	{
		//*q为数字
		if (*q >= '0' && *q <= '9')
		{
			lenth = q - p;

			//长度满足单词要求
			if (lenth >= 3)
			{
				flag = 0;
				for (i = 0; i < lenth; i++)
				{
					word[i] = *(p + i);
				}

				//判断该单词是不是第一次出现
				for (i = 0; i < wordquantity; i++)
				{
					if (!strcmp(word,Word[wordquantity]))
					{
						flag = 1;
					}
				}

				//该单词未出现过
				if (!flag)
				{
					for (i = 0; i < lenth; i++)
					{
						Word[wordquantity][i] = word[i];
					}
					wordquantity++;
				}
				
			}

			//更新指针
			while (*q >= '0' && *q <= '9')
			{
				q++;
			}
			p = q;
		}

		//指针前进
		q++;
		if (*q == '\0')
		{
			break;
		}
	}

	return;
}

//对word中所有单词进行排序并输出
void Sort_Print(void)
{
	int i;
	int j;
	
	//没有单词输出"no word"
	if (wordquantity == 0)
	{
		printf("no word");
		return;
	}
	
	//将所有单词首字母大写
	for (i = 0; i < wordquantity; i++)
	{
		if (islower(Word[i][0]))
		{
			Word[i][0] -= 32;
		}
	}

	//运用strcmp进行冒泡排序
	for (i = 0; i < wordquantity-1; i++)
	{
		for (j = 0; j < wordquantity - i - 1; j++)
		{
			if (strcmp(Word[j], Word[j + 1]) < 0)
			{
				char temp[1000];
				strcpy(temp, Word[j]);
				strcpy(Word[j], Word[j + 1]);
				strcpy(Word[j + 1], temp);
			}
		}
	}

	//按照要求格式进行输出
	for (i = 0; i < wordquantity; i++)
	{
		if (i == wordquantity - 1)
		{
			printf("%s", Word[i]);
		}
		else
		{
			printf("%s ", Word[i]);
		}
	}
	return;
}

int main(void)
{
	int n = 0;
	char str[1100];

	scanf("%d", &n);
	while (n--)
	{
		scanf("%s", str);
		Wordcheck(str);
	}

	Sort_Print();

	return 0;
}

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值