用C语言,所谓特殊单词是指,构成这个单词的字母经过顺序变换或大小写变换形成的一个新单词也出现在文章中。输入数据有若干行,每行为一个字符串,由空格分隔开,单词由大小写字符及数字构成,每个单词长度不超过30个ASCII码字符。若该行字符为#,表示输入结束。按字典序输出所有的特殊单词,所有特殊单词按其第一次在文章中出现的形式输出,每行输出一个单词。示例输入:a aa sd 12 aaa Bd dB\nBD c a 21 A\naa aaa示例输出:12\nBd\na
时间: 2023-11-28 07:51:38 浏览: 40
以下是用C语言解决该问题的代码:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_WORD_LEN 30 // 最大单词长度
// 将字符串 s 转换为小写形式
void to_lower(char* s)
{
for (int i = 0; s[i] != '\0'; i++)
{
s[i] = tolower(s[i]);
}
}
// 将字符串 s 排序
void sort_word(char* s)
{
int len = strlen(s);
for (int i = 0; i < len - 1; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (s[j] > s[j + 1])
{
char temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
}
int main()
{
char words[MAX_WORD_LEN][MAX_WORD_LEN]; // 存储单词
int count = 0; // 单词数量
// 读取输入数据
while (1)
{
char input[MAX_WORD_LEN];
scanf("%s", input);
if (strcmp(input, "#") == 0)
{
break;
}
// 转换为小写形式
to_lower(input);
// 如果单词已存在,则不需要添加到数组中
int exist = 0;
for (int i = 0; i < count; i++)
{
if (strcmp(words[i], input) == 0)
{
exist = 1;
break;
}
}
// 如果单词不存在,则添加到数组中
if (!exist)
{
strcpy(words[count], input);
count++;
}
}
// 排序并输出特殊单词
for (int i = 0; i < count; i++)
{
// 排序
sort_word(words[i]);
// 查找是否存在相同的单词
int exist = 0;
for (int j = i + 1; j < count; j++)
{
char temp[MAX_WORD_LEN];
strcpy(temp, words[j]);
sort_word(temp);
if (strcmp(words[i], temp) == 0)
{
exist = 1;
break;
}
}
// 如果存在相同的单词,则输出它们中第一个出现的单词
if (exist)
{
continue;
}
// 输出单词
printf("%s\n", words[i]);
}
return 0;
}
```
该程序首先读取输入数据,将输入的单词转换为小写形式,并将不重复的单词添加到数组中。然后对数组中的每一个单词进行排序,并查找是否存在相同的单词。如果存在相同的单词,则跳过;否则,输出单词。最终按字典序输出所有的特殊单词。