二维数组,字符串相关函数,

字符串相关函数:

strcat :字符串拼接函数

 char *strcat(char *dest, const char *src);
 功能:
    将src中的字符串拼接到dest中
 参数:
    @dest 拼接的目的字符串 
    @src 拼接的源字符串 ,可以是变量也可以是常量

操作逻辑:逐个查找字符串元素,直到第一个'\0'时插入第一个元素,

并按顺序插入整个字符串,最后在末尾添加结束标志'\0'

eg:
  char dest[100] = "world";
  char src[] = "hello";
  
  strcat(dest,src); //src是一个字符数组数组名
  strcat(dest,"hello");//src是一个字符串常量 

strcpy:字符串拷贝函数

char *strcpy(char *dest, const char *src);
功能:
    将src中字符串拷贝到dest中 

用法:
  strcpy(dest,src); //dest是一个字符数组的数组名
                 //src 可以是字符数组数组名
                 //或 字符串常量 

操作逻辑:由于数组是不能整体赋值的,所以需要单个元素赋值,也就是说逐个替换,

直到遇到'\0'时结束

  eg:
  char dest[10];
  char src[10] = "hello";
  strcpy(dest,src); //src 数组名 
  strcpy(dest,"china"); //src是字符串常量  

 strcmp :字符串比较函数

 int strcmp(const char *s1, const char *s2);
 功能: 
     比较s1 和 s2 字符串的大小 
 参数:
    @s1  ---第一个字符串 
    @s2  ---第二个字符串 

返回值:
   > 0  s1 > s2
   < 0  s1 < s2 
   ==0  s1 == s2 

逐个元素比较ASCII码的大小(谁在前面谁大,'\0'的ASCII值最大,为0),如果后面的元素出现ASCII不相等的情况,或者,遇到'\0'

strlen:字符串长度函数

size_t strlen(const char *s); 
功能:
    统计 给到的字符串的长度
参数:
  s //数组名 或 字符串常量 
返回值:
  表示字符串长度 

操作逻辑:从第一个元素数起,直到‘\0’时结束(‘\0’不计入字符串长度)

与sizeof()区分,sizeof计算的是变量占空间大小,strlen计算的是存入这个变量的字符串长度(不一定占满)

eg:
 char s[] = "hello";
 strlen(s); //数组名 
 
 strlen("hello"); //字符串常量 

puts():字符串输出函数

功能: 将字符串输出,(它会默认输出一个'\n')
int puts(const char *s);
参数:
   s //可以是数组名 也可以是 一个字符串常量 
返回值:
   成功 非负数
   失败 -1 

操作逻辑:逐个读入‘\0’之前的数据
  
eg:
  char s[10] = "hello";
  puts(s); //数组名

  puts("hello"); //字符串常量 

gets() :字符串输入函数

功能: 给字符数组中,输入一个"字符串"
char *gets(char *s)
char *gets(char s[]) //传一个字符数组的数组名 
参数:
 s 表示 需要传的是一个 字符数组的 名字 
返回值:
   表示 存放字符串的 那块空间的地址 

操作逻辑:从第一个读取直到遇到'\n'时停止,并将‘\n’转换为‘\0’
   注意:
      这个函数是危险的,不推荐使用。(一不小心可能就越界了)
      fgets(); //这个函数可以解决(后面学)

与scanf区别:都可以接受字符串,但是scanf不能接收带空白符(例如:'t','b'),但是gets()可以,因为gets()只有遇到换行符'\n'才判断输入结束

注:

1.也就是说,字符串操作函数都需要字符串结束符号'\0'作为基准,所以在实际操作中需要预留'\0'的位置,不能把数组占满

2.字符串操作函数的第一个参数都是被操作的变量名

二维数组:

初始化:

 int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};  //全部初始化
 int a[3][4] = {{1,2,3,4},{0},{9,10,11,12}}; //按行初始化
 int a[3][4] = {1,2}; //部分初始化 
 int a[3][4] ;//未初始化 默认随机值(垃圾值)

注:

   1.二维数组中,也可以是可变长数组
     int a[n][n]; //n可以是个变量 ,但是使用时,数组不能初始化,产生编译报错

     int  a[N][N];//但是可以使用宏定义 #define N 4
   2.二维数组中,可以省略行数,列数不能省略 
    int a[3][4];
    //3可以省略 4不能省略 
    int[4] a[]; //本质上省略的还是一维数组的长度 

→其实在c语言认识里,int[3][4]的存储方式是int[4] [3],因为c语言开辟内存时,开了3块空间,每块有4个char,相当于一个int[4]类型(假定的类型,c语言没有这么定义)

a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[2][0]
a[2][1]
a[2][2]
a[2][3]

二维字符型数组:

char a[5][10]

可以存储最大长度为为10的,5个字符串;

按行初始化:a[5][10]={“hello”,“world“,“who”,“am”,“are”}

可以逐个字符串存储进行初始化

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值