小白的学习笔记 输入十个字符串或者遇到EOF停止并提供五个打印选项的练习题

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int menu(char *str_array);
int print_origin(char **str_array);
int print_ascii(char **str_array);
int print_length(char **str_array);
int print_first_word(char **str_array);
char * customizeget_s(char * row,int buffer);
unsigned int wordlength(char *str);
int main()
{
    char stringstorge[10][40];
    char *str_array[10];
    int count=0;   //As for count
    while(count<10 && customizeget_s(stringstorge[count],40)!= NULL &&
    stringstorge[count][0]!='\0')
    {
        str_array[count]=stringstorge[count];
        count++;
    }
    while (menu(str_array))
    {
        printf("**********************************************************\n");
    }
    return 0;
}
int menu(char *str_array)
{

    printf("\nPlease select a option by enter a number:\n");
    printf("1:print the original strings.\n");
    printf("2:print the strings by ASCII\n");
    printf("3:print the strings by length\n");
    printf("4:print the strings by the first word length\n");
    printf("5:quit\n");
    int selectop;

    while (  scanf("%d",&selectop)!=1)
    {

            printf("ERROR num");
            getchar();
            printf("\n Input again:\n");

    }


    switch (selectop)
    {
        case 1:print_origin(str_array);break;
        case 2:print_ascii(str_array);break;
        case 3:print_length(str_array);break;
        case 4:print_first_word(str_array);break;
        case 5:return 0;
        default :printf("ERROR must be a number between 1-5.\n");break;
    }

    return 1;

}
char * customizeget_s(char * row,int buffer)
{
    char * return_p1;
    int i=0;
    return_p1=fgets(row,buffer,stdin);
    if (return_p1)
    {
        while (row[i]!='\n' && row[i]!='\0')
            i++;
        if (row[i]=='\n')
            row[i]='\0';
        else
            while (getchar()!='\n')
                continue;
    }
    return return_p1;
}
int print_origin(char **str_array)
{
    int i=0;
    for (;i<10 && *str_array!=NULL;i++ )
{
        puts(*(str_array+i));

}
    return 0;
}

int print_ascii(char **str_array)
{
    int i,j;char *temp;
    for (i=0;i<10 && *(str_array+i)!=NULL;i++)
    {
        for (j=i;j<10 && *(str_array+i)!=NULL;j++)
        {
            if (**(str_array+j)>**(str_array+i))
            {
                temp=*(str_array+i);
                *(str_array+i)=*(str_array+j);
                *(str_array+j)=temp;
            }
        }
    }
    for (i=0;i<10 && **(str_array+i) != '\0' ;i++)
    {
        puts(*(str_array+i));
    }

    return 0;
}

int print_length(char **str_array)
{
    int i,j;char *temp;
    for (i=0;i<10 && *(str_array+i)!=NULL;i++)
    {
        for (j=i;j<10 && *(str_array+i)!=NULL;j++)
        {
            if ( strlen(*(str_array+j)) > strlen(*(str_array+i)) )
            {
                temp=*(str_array+i);
                *(str_array+i)=*(str_array+j);
                *(str_array+j)=temp;
            }
        }
    }
    for (i=0;i<10 && **(str_array+i) != '\0' ;i++)
    {
        puts(*(str_array+i));
    }
    return 0;
}
int print_first_word(char **str_array)
{
    int i,j;char *temp;
    for (i=0;i<10 && *(str_array+i)!=NULL;i++)
    {
        for (j=i;j<10 && *(str_array+i)!=NULL;j++)
        {
            if ( wordlength(*(str_array+j)) > wordlength(*(str_array+i))  )
            {
                temp=*(str_array+i);
                *(str_array+i)=*(str_array+j);
                *(str_array+j)=temp;
            }
        }
    }
    for (i=0;i<10 && **(str_array+i) != '\0' ;i++)
    {
        puts(*(str_array+i));
    }

    return 0;
}
unsigned int wordlength(char *str)
{
    unsigned int i;
    for (i=0;i<40 && ( *(str+i)!=' ' ) && (*(str+i)!='\0') ;i++)
    ;
    return i;
}

c primer plus十一章练习题第11题个人的答案
采用了对指针数组进行插入排序的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 scanf 函数读取并分隔字符串,存入字符串数组中。具体代码如下: ```c #include <stdio.h> #include <string.h> int main() { char str[100]; char strs[10][100]; int count = 0; printf("请输入字符串(以换行符结束):\n"); while (fgets(str, sizeof(str), stdin)) { str[strcspn(str, "\n")] = '\0'; // 如果输入的是空行,停止输入 if (strlen(str) == 0) { break; } // 将读取的字符串存入字符串数组中 sscanf(str, "%s", strs[count++]); } // 输出存储的字符串 printf("输入字符串为:\n"); for (int i = 0; i < count; i++) { printf("%d: %s\n", i + 1, strs[i]); } return 0; } ``` 当然,也可以使用 getchar 函数逐个字符读取并分隔字符串,存入字符串数组中。具体代码如下: ```c #include <stdio.h> #include <string.h> int main() { char ch; char str[100]; char strs[10][100]; int count = 0; printf("请输入字符串(以换行符结束):\n"); while ((ch = getchar()) != EOF) { if (ch == '\n') { // 如果输入的是空行,停止输入 if (strlen(str) == 0) { break; } // 将读取的字符串存入字符串数组中 sscanf(str, "%s", strs[count++]); memset(str, 0, sizeof(str)); // 清空字符串缓冲区 } else if (ch == ' ') { // 将读取的字符串存入字符串数组中 sscanf(str, "%s", strs[count++]); memset(str, 0, sizeof(str)); // 清空字符串缓冲区 } else { str[strlen(str)] = ch; } } // 输出存储的字符串 printf("输入字符串为:\n"); for (int i = 0; i < count; i++) { printf("%d: %s\n", i + 1, strs[i]); } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值