当前位置: 首页 > news >正文

c语言题目 拷贝函数参数

目录

题目:假设我现在有很多参数分别用符号隔开,例如:"abcd,1234;xy,opasda",要求把逗号除掉,并一个个存放在数组中(不使用strtok函数)

方法一:使用char型的二维数组,让其内的元素存该参数,并将其打印出来。

方法二:使用指针数组,来存放函数参数的地址

总结:


题目:假设我现在有很多参数分别用符号隔开,例如:"abcd,1234;xy,opasda",要求把逗号除掉,并一个个存放在数组中(不使用strtok函数)

方法一:使用char型的二维数组,让其内的元素存该参数,并将其打印出来。

思路:定义一个指针指向该参数串,并用strlen函数获得字符串的长度,也可以定义一个一维数组并初始化,这里体现了指针跟数组的互相转换,我们通过偏移指针来给二维数组赋值,下面是我的算法和代码。

代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
    //方法一:定义一个二维数组
    char *s = "abcd,1234;xy,opasda";
    char x[4][10];
    int ii = 0;
    for (int i = 0; i < 4; i++)
    {
        for (int h = 0; ii < strlen(s); ii++, h++)
        {
            if (s[ii] == ',' || s[ii] == ';')
            {
                ii++;
                break;
            }

            x[i][h] = s[ii];
        }
    }

    for (int i = 0; i < 4; i++)
    {
        printf("打印拷贝好参数%s\n", x[i]);
    }

    return 0;
}

方法二:使用指针数组,来存放函数参数的地址

思路:定义一个char型的数组来存放函数参数的字符串,而不是一个指针,是因为指针是代表地址,而函数的参数串是一个常量,不能被修改,同时也是因为使用指针会导致获取到的指针它会把后面全部参数都打印出来,所以我们要用数组来存放这样才能跟我们的'\0'结束符好搭配。

当我们的数组偏移到,或者;我们就可以置为结束标记,并使其继续走。

代码如下:

#include <stdio.h>
#include <string.h>
int main()
{
    char s[] = "abcd,1234;xy,opasda";//不能使用char *s= "abcd,1234;xy,opasda
    //方法二:定义指针数组来存放
    char *p[4];   //指针数组 里面的元素是指针 
    int ii = 0;
    for (int i = 0; i < 4; i++)
    {
        p[i] = s+ii;
        for (; ii < sizeof(s); ii++)
        {
            if (s[ii] == ',' || s[ii] == ';')
            {
                s[ii] = '\0';//结束标志
                ii++;
                break;
            }
        }
    }

    for (int i = 0; i < 4; i++)
    {
        printf("打印拷贝好参数%s\n", p[i]);
    }

    return 0;
}

总结:

二维数组的方法是通过对函数参数的拷贝,所以不需要结束标记,只需要字符一个一个的正确拷贝到里面即可;

指针数组的方法因为里面的元素是指针,所以我们要用数组先对其函数参数串的拷贝再去修改,如果是指针指向该函数参数串,那么常量是无法修改的会报错。另外我们在使用结束标记\0后,我们还不能使用strlen函数,因它是计算有效长度,一旦出现了\0就会停止计算,所以我们要使用sizeof函数来计算数组的大小。 

相关文章:

  • c# 利用mv-cs200-10gc工业相机,识别液注的高度
  • 3DS模拟器使用(pc+安卓)+金手指+存档互传
  • Java蓝桥杯
  • 万邦大数据
  • 词向量:优维大模型语义理解的深度引擎
  • 【华为OD机考真题】- 用户调度问题(Java)
  • C++相关基础概念之入门讲解(上)
  • 全面!陕西省10市企业技术中心申报条件奖补和认定补助材料、时间汇集
  • linux ptrace 图文详解(二) PTRACE_TRACEME 跟踪程序
  • # 使用OpenAI Agents实现智能代理的生命周期管理
  • 32、构造函数
  • CentOS 系统安装 docker 以及常用插件
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • mapbox基础,使用线类型geojson加载symbol符号图层,用于标注文字
  • 零信任架构实战手册-企业安全升级
  • 【AD】6-1 PCB常用规则
  • 7年全栈开发经验 · 兼职技术合作
  • 基于SpringBoot的Mybatis和纯MyBatis项目搭建的区别
  • 【协议篇】RPC、gRPC
  • React封装axios请求方法
  • 小马智行一季度营收增12%:Robotaxi收入增长两倍,预计车队规模年底到千台
  • 俄乌上周在土耳其直接谈判,外交部回应
  • 肖钢:一季度证券业金融科技投资强度在金融各子行业中居首
  • 南京艺术学院博导、雕塑家尹悟铭病逝,年仅45岁
  • 卿晨璟靓等用服刑经历“引流”,专家:将犯罪问题娱乐化会消解刑罚严肃性
  • 国际金价下跌,中概股多数上涨,穆迪下调美国主权信用评级