字符串排序(3);多单词含逗号字符串处理;单个字符逐个处理;注意顺序;scanf;C语言

字符串排序(3)

https://ac.nowcoder.com/acm/contest/5646/J

#include <stdio.h>
#include <string.h>

// scanf:
// 除空格字符外的普通字符必须与输入严格匹配,除%c外其他转换说明都会自动跳过待输入值前面所有的空白
// 若格式说明字符之间有逗号,且在逗号前加空白,则逗号前后有无空格的输入均可识别ok
// 格式字符串中的空白意味着跳过下一个输入项前面的所有空白(C Primer Plus P95)
//(注scanf(" %c",&ch)是从第一个非空白字符开始读取;而scanf("%c",&ch)是从输入中的第一个字符开始读取)

int main()
{
    int flag = 0;
    int i,j,n;
    while(1){
        char s[100][1000];
        char *p[100]; // 内含100个指针变量(指向字符类型)的数组
        char *tmp;
        int endflag=0;
        for(i=0;;i++){
            for(j=0;;j++){
                if(scanf("%c",&s[i][j])==EOF){ // 注意此处若没有空格,则%s会输入整个字符串,所以需要按字符读取处理
                    flag = 1; // 读取输入完毕
                    break;
                }
 //               printf("%c",s[i][j]);
                if(s[i][j]==','){
                    break;
                }
                if(s[i][j]=='\n'){
                    endflag = 1;
                    break;
                }
            }
            // 当已到达文件结尾即scanf返回值为EOF时,并不会有endflag为1,会导致死循环而数组越界等
            if(flag){ // 注意此处也要判断用以退出循环,否则会发生段错误....!!
                break;
            }
            // 注意每行的最后一个单词也要加结束符\0,并完成赋值操作
            // !! 此上下3处顺序很重要,易出现段错误情况,注意仔细处理,定位了好久...
            s[i][j]='\0'; // 替换逗号,给单词加上结束符
            p[i] = s[i];
 //           printf("%s\n",p[i]);

            if(endflag){ // 该行输入完毕
  //              printf("\n");
                break;
            }
        }
        if(flag){
            break;
        }
        // 下面的排序与字符串排序(1)字符串排序(2)大致相同
        n = i+1;
        for(i=0;i<n-1;i++){
            for(j=i+1;j<n;j++){
                if(strcmp(p[i],p[j])>0){
                    tmp = p[i];
                    p[i] = p[j];
                    p[j] = tmp;
                }
            }
        }
        for(i=0; i<n-1; i++){
            printf("%s,",p[i]);
        }
        printf("%s\n",p[i]);
    }

    return 0;
}
全部评论

相关推荐

10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
10-25 00:32
香梨想要offer:感觉考研以后好好学 后面能乱杀,目前这简历有点难
点赞 评论 收藏
分享
最近又搬回宿舍了,在工位坐不住,写一写秋招起伏不断的心态变化,也算对自己心态的一些思考表演式学习从开始为实习准备的时候就特别焦虑,楼主一开始选择的是cpp后端,但是24届这个方向已经炸了,同时自己又因为本科非92且非科班,所以感到机会更加迷茫。在某天晚上用java写出hello&nbsp;world并失眠一整晚后选择老本行干嵌入式。理想是美好的,现实情况是每天忙但又没有实质性进展,总是在配环境,调工具,顺带还要推科研。而这时候才发现自己一直在表演式学习,徘徊在设想如何展开工作的循环里,导致没有实质性进展。现在看来当时如果把精力专注在动手写而不是两只手端着看教程,基本功或许不会那么差。实习的焦虑5月,楼主...
耶比:哲学上有一个问题,玛丽的房间:玛丽知道眼睛识别色彩的原理知道各种颜色,但是她生活在黑白的房间里,直到有一天玛丽的房门打开了她亲眼看到了颜色,才知道什么是色彩。我现在最大可能的减少对非工作事情的思考,如果有一件事困扰了我, 能解决的我就直接做(去哪里或者和谁吵架等等……),解决不了的我就不想了,每一天都是最年轻的一天,珍惜今天吧
投递比亚迪等公司10个岗位 > 秋招被确诊为…… 牛客创作赏金赛
点赞 评论 收藏
分享
评论
5
收藏
分享
牛客网
牛客企业服务