zoukankan      html  css  js  c++  java
  • C语言 百炼成钢19

    /*
    题目55: 有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";),要求写一个函数(接口),输出以下结果
    1)    以逗号分割字符串,形成二维数组,并把结果传出;
    2)    把二维数组行数运算结果也传出。
    strchr(“aa,aa”,’,’ );
    请自己定义一个接口(函数)。
    要求1:能正确表达功能的要求,定义出接口(函数)(30分);
    要求2:正确实现接口(函数),并实现功能(40分);
    要求3:编写正确的测试用例。(30分)。
    */
    //解析字符串
    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    //删除空格
    int removespace(const char *pin, char *pout);
    
    //解析字符串
    int analysistr(const char *pin, char bufstr[8][20], char *requirc);
    
    //打印字符数组
    int printfarr09(char parr[8][20]);
    
    void main(){
        //原始字符串(非','结尾)
        const char *p = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,werertw";
        //原始字符串(','结尾)
        const char *p2 = "abcdef,acccd,eeee,aaaa,e3eeeee,sskss,";
        //新字符串数组
        char bufstr[8][20] = {0};
        //新字符串数组
        char bufstr2[8][20] = { 0 };
        //定义以何种字符作为截取字符
        char ch = ',';
        analysistr(p, bufstr, &ch);
        analysistr(p2, bufstr2, &ch);
        //打印新字符数组
        printfarr09(bufstr);
        system("pause");
    }
    
    //打印二维数组
    int printfarr09(char parr[8][20]){
        int ERRO_MSG = 0;
        if (parr == NULL)
        {
            ERRO_MSG = 1;
            printf("parr==NULL erro msg:%d", ERRO_MSG);
            return ERRO_MSG;
        }
        //打印二维数组
        for (int i = 0; i < 8; i++)
        {
            printf("%s
    ", parr[i]);
        }
        return ERRO_MSG;
    }
    
    //删除空格
    int removespace(const char *pin, char *pout){
        int ERRO_MSG = 0;
        if (pin == NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        if (pout == NULL)
        {
            ERRO_MSG = 2;
            printf("pout==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        while (*pin != ''){
            if (*pin != ' ')
            {
                *pout++ = *pin;
            }
            pin++;
        }
        return ERRO_MSG;
    }
    
    //解析字符串
    int analysistr(const char *pin, char bufstr[8][20], char *requirc){
        int ERRO_MSG = 0;
        if (pin == NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        if (bufstr == NULL)
        {
            ERRO_MSG = 2;
            printf("bufstr==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        if (requirc == NULL)
        {
            ERRO_MSG = 3;
            printf("requirc==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        //分解字符串
        //strchr函数原型:extern char *strchr(const char *s,char c);查找字符串s中首次出现字符c的位置。
        const char *p = pin;
        const char *ptmp = pin;
        //新字符串个数计数
        int ncount = 0;
        int res = 0;
        //临时存储一段字符串
        char strt[20] = { 0 };
        //用来删除strt中的空格
        char strt2[20] = { 0 };
        while (p != ''){
            /*memset是计算机中C / C++语言函数。
            将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,
            第一个值为指定的内存地址,块的大小由第三个参数指定,
            这个函数通常为新申请的内存做初始化工作, 其返回值为指向s的指针。*/
            //清除字符串缓存,每次循环都会产生字符串缓存
            memset(strt, 0, sizeof(strt));
            memset(strt2, 0, sizeof(strt2));
            p = strchr(p, *requirc);
            if (p == NULL)
            {
                //处理','不作为最后一个符的情况
                //没有找到字符,那么将剩下的所有字符当作一个新字符串
                strcpy(strt, ptmp);
                //删除字符串中的空格
                res = removespace(strt, strt2);
                if (res)
                {
                    ERRO_MSG = 4;
                    printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
                    return ERRO_MSG;
                }
                //处理','作为最后一个符的情况
                if (strlen(strt2)>1)
                {
                    //将新字符串拷贝到数组里
                    strcpy(bufstr[ncount], strt2);
                }
                break;
            }
            else{
                //此时ptmp在开头,p指针在字符','第一次出现的地方
                strncpy(strt, ptmp, p - ptmp);
                //删除字符串中的空格
                res = removespace(strt, strt2);
                if (res)
                {
                    ERRO_MSG = 4;
                    printf("删除空格fuc报错 erro msg:%d", ERRO_MSG);
                    return ERRO_MSG;
                }
                if (strlen(strt2)>1)
                {
                    //将新字符串拷贝到数组里
                    strcpy(bufstr[ncount], strt2);
                    ncount++;
                }
                //重新初始化指针
                ptmp = p = p + 1;
            }
        }
        return ERRO_MSG;
    }

  • 相关阅读:
    ios 写项目的时候遇到的问题及解决方案(1)
    思绪锦集
    iOS学习-----真机测试过程
    StackOverflow程序员推荐的几本书籍
    关于算法学习的重要性
    程序的灵魂-算法
    C++ 之 const 随笔记
    Foundation 框架之——NSString、NSMutableString
    Objective-C之NSString和NSMutableString
    Objective-C之集合对象(NSSet,NSMutableSet,NSIndexSet)
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5315603.html
Copyright © 2011-2022 走看看