C语言轻松学习-10

学完上一页的字符数组的定义,我们接下来开始学习一些字符数组可能要使用到的一些函数,

因为是字符数组,它们的函数大多都是和字符串有关,所以我们开始时要引入“string.h”这个“字符串处理”的头文件,这个头文件里包含我们经常使用的“strlenstrcmpstrcpy”“计算长度,比较大小,拷贝”

那么我们先来使用“strlen”用来计算字符串的长度的函数吧,

代码如下: 我们要记得调用“string.h”库

strlen(数组地址也就是数组名);返回的是一个整数类型的数值

#include<stdio.h>
#include<string.h>
int main()
{
  char a[10]={"love"};
  printf("%d",strlen(a));
  return 0;
}

代码调试截图如下:

我们来学习一下“strcmp()”比较字符串大小的函数,这个函数可有意思了,让我们比较字符串的大小,我们仔细一想,字符串怎么比大小?比的是长度?感觉很神奇,

首先我们先大概抽象的理解一下,

“strcmp(s1,s2);”意思是,

若 s1=s2 则 返回值为“0”,

若 s1>s2 则 返回值为“正数”,

若 s1<s2 则 返回值为“负数”,

我们先按照这个定义来写一下代码,

代码如下:我们先不需要理解计算机是如何比较字符串的大小,一会儿我们就会将到

#include<stdio.h>
#include<string.h>
int main()
{
  char a[10]={"love"};
  char b[10]={"like"};
  printf("字符串相等时,返回值为:%d\n",strcmp(a,a));
  printf("字符串a>b时,返回值为:%d\n",strcmp(a,b));
  printf("字符串a<b时,返回值为:%d\n",strcmp(b,a));
  return 0;
}

代码调试截图如下:通过输出内容,我们发现了输出了“1”和“-1”我们不能说  如果不等于时一定输出“1”或“-1”因为C语言并没有明确规定,只规定了“正数”和“负数”

我们先说明一下,在C语言中两个字符串是如何连接起来(不同语言的连接字符串方式大有不同,例如:e4a,用&连接;E语言,用+连接),我们需要调用“string.h”库中的“strcat(a,b);”

用代码来解释一下:原来数组a[10]我想看看是不是数组b的内容直接赋值给数组a的空的内存地址中,我把a[10]修改为a[5]顺便验证一下我们的猜想

#include<stdio.h>
#include<string.h>
int main()
{
  char a[5]={"love"};
  char b[10]={"like"};
  strcat(a,b);
  printf("%s",a);
  return 0;
}

代码调试截图如下:我们发现并不是将数组b的数值添加到a中未赋值的空间,我们的猜想失败,

那么难道是将数组b的内存地址更改了?继承了数组a后面的地址?我们再次带着疑问写下代码,我们观察一下他们的内存地址有何规律

输出地址的代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
  char a[5]={"love"};
  char b[10]={"like"};
  strcat(a,b);
  printf("%s\n",a);
  for(int i=0;i<20;i++)
    printf("%c  %d\n",a[i],&a[i]);
  return 0;
}

代码调试截图如下:我们发现我们的猜想成立,成功了,发现它竟然真的是改变了地址,

那么我们只是输出了数组a的地址,我们再来看一看数组b的地址会不会被泯灭了?

带随着疑问,我们来写下代码输出数组b的地址以及其对应的数值

代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
  char a[5]={"love"};
  char b[10]={"like"};
  strcat(a,b);
  printf("%s\n",a);
  for(int i=0;i<20;i++)
    printf("%c  %d\n",a[i],&a[i]);
  printf("\n\n");
  for(int i=0;i<15;i++)
    printf("%c  %d\n",b[i],&b[i]);
  return 0;
}

代码调试截图如下:我们发现数组b的值以及其对应的地址完好无损,那么我们就得出结论了,能得到“strcat”连接语句自动在“数组a”后面申请了适当的内存地址,这是重点大家要记住。

好的,接下来我们来解释一下,字符串的大小是如何比较的,

例如:love>like       原理是,计算机先比较 第一个字符,l=l 发现他们的第一个字符对应的ASCII码值是相等的,那么就会比较他们的第二个字符  o>i  ,o的ASCII值为111 i的ASCII值为105,

111>105,所以 后面也不需要比较了,直接说明 因为 o(ASCII)>i(ASCII) 所以直接判定,love>like

那么我来出一道题,用字符串比较大小,比较 10 和 2 谁大,那么我们开始,10的第一个字符为 1,2 的第一个字符 为 2,2>1,则 2>10,那么我们知道 2应该小于10的,那么我们应该怎么办呢?其实不难,只要在2前面加上一个0,比较 10 和 02 的大小,就可以实现,10>2了

OK,丰富了我们的大脑,我们来学习一个简单的字符串命令“strcpy()”百度百科:strcpy是一种C语言的标准库函数,strcpy把含有‘\0’结束符的字符串复制到另一个地址空间,返回值的类型为char*。

例如代码:将数值b的字符串拷贝到数组a中

#include<stdio.h>
#include<string.h>
int main()
{
  char a[5]={"love"};
  char b[10]={"like"};
  printf("%s\n%s\n",strcpy(a,b),a);
  return 0;
}

代码调试截图:我们发现了,原来数组a的字符串被覆盖了,

1 2 3 4
未经允许不得转载:晗雅|星空 » C语言轻松学习-10
分享到:

请选择你看完该文章的感受:

7瞧一瞧 1扯淡 6学到了 2不懂 8正能量 1无聊

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址 (选填)