#include <stdio.h>
#include <string.h>
#include <ctype.h>
void put_string(char **st,int n); //打印字符串列表
void ascii_s(char **st,int n); //ASCII顺序打印字符串列表
void long_put(char **st,int n); //按长度递增排序
int fast_words(char *st);//字符串首单词
void fast_words_put(char **st,int n); //按首单词长短排序
#define SIZE 81 //字符串长度 包括\0
#define LIM 10 //可读入的最多行数
char *s_gets(char *st,int n); //输入字符串
int main(void)
{
char input[LIM][SIZE];
char *ptstr[LIM];
int ct = 0;
char ch;
puts(“请输入10组字符串:”);
while(ct<LIM&&s_gets(input[ct],SIZE)!=NULL&&input[ct][0]!=’\0’) //字符串数组赋值,循环条件是数组首字符不是空字符
{
ptstr[ct]=input[ct];
ct++;
}
puts(“a.打印源字符串列表。 b.以ASCII中的顺序打印字符串。”);
puts(“c.按长度递增打印字符串。 d.按字符串中第一个单词长度打印字符串。”);
puts(“e.退出。”);
while((ch=getchar())!='e') //e退出
{
if('\n'==ch)
continue;
if(ch<'a'||ch>'e') //不再选项内重新输入
{
puts("请重新输入正确的选择:");
ch=getchar();
}
if(islower(ch))
switch(ch)
{
case 'a':
put_string(ptstr,LIM);
break;
case 'b':
ascii_s(ptstr,LIM);
break;
case 'c':
long_put(ptstr,LIM);
break;
case 'd':
fast_words_put(ptstr,LIM);
break;
}
puts("a.打印源字符串列表。 b.以ASCII中的顺序打印字符串。");
puts("c.按长度递增打印字符串。 d.按字符串中第一个单词长度打印字符串。");
puts("e.退出。");
continue;
}
puts(“Bye!”);
return 0;
}
void put_string(char **st,int n)
{
int i;
for(i=0;i<n;i++)
puts(st[i]);
}
char *s_gets(char * st, int n)
{
char * ret_val;
int i = 0;
ret_val = fgets(st,n,stdin);
if (ret_val)
{
while(st[i] != '\n' && st[i] != '\0')
i++;
if (st[i] == '\n')
st[i] = '\0';
else
while(getchar() != '\n');
}
return ret_val;
}
void ascii_s(char **st,int n)
{
int i,j;
char *temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{ //字符串排序,最大的排最后
if(strcmp(st[j],st[j+1])>0)//temp记录最大的字符串并把它排在最后
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
put_string(st,n);
}
void long_put(char **st,int n)
{
int i,j;
char *temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(strlen(st[j])>=strlen(st[j+1])) //字符串最长的放最后
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
put_string(st,n); //打印结果
}
int fast_words(char *st)
{
int i;
for(;!isalpha(*st);st++) //略过数组开头的非字母字符
if(*st=='\0') return 0; //如果是空字符 返回0.
for(i=0;isalpha(st[i]);i++) //循环计量首字母长度
continue;
return i+1; //由于字母长度计量变量i是从0开始计数,所以加1
}
void fast_words_put(char **st,int n)
{
int i,j;
char *temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(fast_words(st[j])>fast_words(st[j+1]))
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
put_string(st,n);
}