字符串练习程序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++]);
    }

}

 

posted @ 2013-11-20 21:58  donsh  阅读(193)  评论(0编辑  收藏  举报