参数解析C语言

参数解析

http://www.nowcoder.com/questionTerminal/668603dc307e4ef4bb07bcd0615ea677

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

int main(){
    char str[100];

    int len, num, i, j, flag, first;
    while(scanf("%[^\n]", &str)){  // 遇到换行符结束
        int label[100];
        int l;
        l = 0;
        len = strlen(str);
        num = 0;
        flag = 1;//遇到第一个引号前
        first = 0;
        for (i = 0; i < len; i++){
            if(str[i] == '"' && flag == 1){//双引号是这样表示吗??
                flag = 2;//遇到第二个引号前
                first = i + 1;
            }
            else if(str[i] == '"' && flag == 2){
                flag = 3;//第二个引号后面的空格
                num++;
                label[l] = first;
                l++;
                label[l] = i-1;
                l++;
                first = i + 2;
            }
            else if(str[i] == ' ' && flag == 3){
                flag = 1;
            }
            else if(str[i] == ' ' && flag == 1){
                num++;
                label[l] = first;
                l++;
                label[l] = i-1;
                l++;
                first = i + 1;
            }
            else if(str[i] != '"' && i + 1 == len){
                num++;
                label[l] = first;
                l++;
                label[l] = i;
                l++;
            }
        }
        printf("%d\n", num);
        for(i = 0; i < l; i++){
            if(i%2 == 0){
                for(j = label[i]; j <= label[i+1]; j++){
                    printf("%c", str[j]);
                }
                printf("\n");
            }
        }
    }
    return 0;
}

注意1:9行 scanf遇到空格、回车、跳格键会结束输入

scanf("%[^\n]",str); //读到'\n'结束读取
全部评论

相关推荐

牛客5655:其他公司的面试(事)吗
点赞 评论 收藏
分享
宇智波爱学习:我还没收到笔试
投递荣耀等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务