/************************************************************************/
/* 字符串练习程序 */
/************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void ShowDaw();
void OutInit(char StrN[][80], int n);
void OutAscii(char *StrN[], int n);
void OutLenth(char *StrN[], int n);
void OutOneLenth(char *StrN[], int n);
int main()
{
char StrNum[10][80];
char *Str[10];
char ch, j = 1;
int i = 0;
while (i < 10 && gets(StrNum[i]) != NULL)
{
Str[i] = StrNum[i];
i++;
}
do
{
ShowDaw();
ch = getchar();
fflush(stdin);
if ((ch-0x30) < 1 || (ch-0x30) > 5)
{
printf("选择错误,请重新选择(请输入1-5的数字)\n");
continue;
}
switch(ch)
{
case '1':
OutInit(StrNum, i);
printf("\n");
break;
case '2':
OutAscii(Str, i);
printf("\n");
break;
case '3':
OutLenth(Str, i);
printf("\n");
break;
case '4':
OutOneLenth(Str, i);
printf("\n");
break;
case '5':
j = 0;
break;
}
} while (j);
getch();
return 0;
}
/************************************************************************/
/* 菜单输出 */
/************************************************************************/
void ShowDaw()
{
printf("========================");
printf("\n1 输出初始化列表");
printf("\n2 按ASCII顺序输出");
printf("\n3 按长度递增顺序输出");
printf("\n4 按第一个单词的长度输入");
printf("\n5 退出本程序\n");
printf("========================\n");
}
/************************************************************************/
/* 初始化输出 */
/************************************************************************/
void OutInit(char StrN[][80], int n)
{
int i = 0;
while (i < n)
{
puts(StrN[i++]);
}
}
/************************************************************************/
/* 按Ascii排列输出 */
/************************************************************************/
void OutAscii(char *StrN[], int n)
{
char *Temp;
int i, j;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (strcmp(StrN[i], StrN[j]) > 0)
{
Temp = StrN[i];
StrN[i] = StrN[j];
StrN[j] = Temp;
}
}
}
i = 0;
while (i < n)
{
puts(StrN[i++]);
}
}
/************************************************************************/
/* 按字符串长度输出 */
/************************************************************************/
void OutLenth(char *StrN[], int n)
{
char *Temp;
int i, j;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (strlen(StrN[i]) > strlen(StrN[j]))
{
Temp = StrN[i];
StrN[i] = StrN[j];
StrN[j] = Temp;
}
}
}
i = 0;
while (i < n)
{
puts(StrN[i++]);
}
}
/************************************************************************/
/* 判断第一个单词长度 */
/************************************************************************/
int StrOneCmp(char *StrN)
{
int i = 0;
while (*StrN != ' ' && *StrN != ',' && *StrN != '\t' && *StrN != '\0')
{
i++;
StrN++;
}
return i;
}
/************************************************************************/
/* 按第一个单词长度输出 */
/************************************************************************/
void OutOneLenth(char *StrN[], int n)
{
char *Temp;
int i, j;
for (i=0; i<n-1; i++)
{
for (j=i+1; j<n; j++)
{
if (StrOneCmp(StrN[i]) > StrOneCmp(StrN[j]))
{
Temp = StrN[i];
StrN[i] = StrN[j];
StrN[j] = Temp;
}
}
}
i = 0;
while (i < n)
{
puts(StrN[i++]);
}
}