/*
编写一个函数,读入10个字符串或者读到EOF时停止。
该程序为用户提供一个有5个选项的菜单:
打印源字符串列表
以ASCII中的顺序打印字符串
按长度递增顺序打印字符串
按字符串中第1个单词的长度打印字符串
退出
菜单可以循环显示,除非用户选择退出选项。当然,该
程序要能真正完成菜单中各选项的功能。
*/
/*测试用字符串
sadflkj
dskfjs
fsdf
dsfsd
sdf sdf sdf
sdfs
x
xcvcxv
b
a
*/
//测试用字符串
//={" Jddd de","ISD","HS"," ASDFA DFDS","FW"," aEQWerw e","DBV","Cc","BS dD","A DFF"}
//{"J","I","H","G","F","E","D","C","B","A"};
#include
#include
#include
#define SIZE 10
void get_string(char tr[][40]);
void bubble_sort(int arr[], int len);
int word_len(char *tr);
void repeat_zero(int len[]);
void a(char tr[][40]);
void b(char tr[][40]);
void c(char tr[][40]);
void d(char tr[][40]);
int main(void)
{
int i=0;
char strings[SIZE][40]={"\0"} ;
printf("输入10个字符串 CTRL+Z结束\n");
get_string(strings);
printf("1.打印源字符串列表\n2.以ASCII中的顺序打印字符串\n3.按长度递增顺序打印字符串\n4.按字符串中第1个单词的长度打印字符串\n5 to quit\n");
while((scanf("%d",&i))!=EOF&&i>5)
{
printf("1.打印源字符串列表\n2.以ASCII中的顺序打印字符串\n3.按长度递增顺序打印字符串\n4.按字符串中第1个单词的长度打印字符串\n5 to quit\n");
while(getchar()!='\n')
continue;
}
switch(i)
{
case 1: a(strings); break;
case 2: b(strings); break;
case 3: c(strings); break;
case 4: d(strings); break;
case 5: break;
default:printf("erro"); break;
}
return 0;
}
void get_string(char tr[][40])//读10个字符串
{
int i;
for (i = 0; i < SIZE ; i++)
fgets(tr[i], 40, stdin);//fgets读到EOF时会停止
}
void bubble_sort(int arr[], int len) //冒泡排序
{
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int word_len(char *tr)//取词长
{
int i=0,flag=0,j=0;
while(tr[i]==' '&&i<40)
i++;
while((tr[i]!=' '&&tr[i]!='\0'&&tr[i]!='\n'&&tr[i]!='\t')&&i<40)
{
i++;
j++;
}
return j;
}//写的不是很好,不过能用.
void repeat_zero(int len[])//重复改为0
{
int i;
for(i=0;i
if(len[i]==len[i+1])
len[i]=0;
}
}
void a(char tr[][40])
{
int i;
for(i=0;i
}
void b(char tr[][40])//对首字母进行冒泡排序得到新的数组后去重,让tr按照去重后的数组输出
{
int asc[SIZE]={0};
int i,j,k;
for(i=0;i
j=0;
while(tr[i][j]==' ')
j++;
asc[i] = tr[i][j];
}
bubble_sort(asc,SIZE);
repeat_zero(asc);
for(i=0;i
if(asc[i]!=0)
{
for(j=0;j
k=0;
while(tr[j][k] == ' ')
k++;
if(asc[i] == tr[j][k])//asc放的是首字母,要找到tr字符串的首字母和它比较
{
printf("tr[%d]:%s\n",j,tr[j]);
}
else
continue;
}
}
}
}
void c(char tr[][40])//对首长度进行冒泡排序得到新的数组后去重,让tr按照去重后的数组输出
{
int len[SIZE]={0};
int i,j;
char *p[SIZE];
for(i=0;i
len[i] = strlen(tr[i]);
}
bubble_sort(len,SIZE);
repeat_zero(len);
for(i=0;i
if(len[i]!= 0)
{
for(j=0;j
{
printf("tr[%d]:%s\n",j,tr[j]);
}
else
continue;
}
}
}
void d(char tr[][40])//对单词长度进行冒泡排序得到新的数组后去重,让tr按照去重后的数组输出
{
int len[SIZE]={0};
int i,j;
for(i=0;i
bubble_sort(len,SIZE);
repeat_zero(len);
for(i=0;i
if(len[i]!= 0)
{
for(j=0;j
{
printf("tr[%d]:%s\n",j,tr[j]);
}
else
continue;
}
}
}