输入若干行数据,每行只包含英文字符(不区分大小写)和数字字符,请找出所有的“单词”,这里所说的“单词”指的是长度大于等于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;
}