字符串练习程序C primeri Plus 课后题
/************************************************************************/ /* 字符串练习程序 */ /************************************************************************/ #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++]); } }