C语言(7)_字符串处理

一、获取字符串长度函数

strlen函数

复制代码
 1  #include <string.h>
 2  size_t strlen(const char *s);
 3 
 4 3功能:计算一个字符串的长度
 5  参数:
 6  s:指定的字符串
 7 
 8 注意:strlen获取的字符串长度遇到第一个“\0”结束且"\0"后面的不算做字符串长度之中
 9 
10  char s1[100] = "hel\0lo";
11 
12  printf("s1_len = %d\n", strlen(s1));  //s1_len = 3
13  printf("s1_size = %d\n", sizeof(s1)); //s1_size =100
14 
15  char *s2 = "hello";
16 
17  printf("s2_len = %d\n", strlen(s2));  //s2_len = 5
18  printf("s2_size = %d\n", sizeof(s2)); //s2_size =4
复制代码

二、字符串拷贝函数

2.1  strcpy函数:

复制代码
 1  #include <string.h>
 2  char *strcpy(char *dest, const char *src);
 3 
 4  功能:将src复制给dest
 5  参数:
 6  dest:目的字符串
 7  src:源字符串
 8 
 9  注意:使用strcpy函数复制字符串时必须保证dest足够大,否则会内存溢出
10  strcpy是将src字符串中第一个\0之前包括\0复制给dest
11 
12 
13 例:
14 
15 char s1[32] = "hello world";
16  //使用strcpy函数时,必须保证第一个参数的内存足够大
17  char s2[32] = "abcdefg";
18 
19  strcpy(s1, s2);
20 
21  printf("s1 = %s\n", s1);  //s1 = abcdefg
复制代码

 

2.2  strcnpy函数:

1 char *strncpy(char *dest, const char *src, size_t n);
2 
3  函数的说明:
4  将src指向的字符串前n个字节,拷贝到dest指向的内存中
5  
6  注意:
7  1、strncpy不拷贝 ‘\0’
8  2、如果n大于src指向的字符串中的字符个数,则在dest后面填充n‐strlen(src)个’\0’

三、字符串追加函数

3.3 strcat函数:

查看代码

#include <string.h>
 char *strcat(char *dest, const char *src);

 功能:将src追加到dest的后面
 参数:
 dest:目的字符串
 src:源字符串
 
 
 例:
  #include <stdio.h>
  #include <string.h>
  
 int main(int argc, char *argv[])
 {
 //使用strcat函数追加字符串
 char s1[32] = "hello world";
 char s2[32] = "abcdef";

 //strcat是从s1的\0的位置开始追加,直到s2的第一个\0复制完毕后结束
 strcat(s1, s2);

 printf("s1 = %s\n", s1);

 return 0;
 }

执行结果:
        s1 = hello worldabcdef

3.3 strncat函数:

 char *strncat(char *dest, const char *src, size_t n);

 追加src指向的字符串的前n个字符,到dest指向的字符串的后面。
 注意:
   如果n 大于src的字符个数,则只将src字符串追加到dest指向的字符串的后面
   追加的时候会追加’\0

四、字符串比较函数

strcmp和strncmp函数

 #include <string.h>
 int strcmp(const char *s1, const char *s2);
 int strncmp(const char *s1, const char *s2, size_t n);

 功能:strcmp是比较两个字符串的内容,strncmp是比较两个字符串的前n个字节是否一样
 
 参数:
 s1、s2:要比较的两个字符串
 n:strncmp中的参数n表示要比较的字节数
 
 返回值:
     0 s1 = s2
     >0 s1 > s2
     <0 s1 < s2

五、字符查找函数

strchr 和strrchr函数:

#include <string.h>
 char *strchr(const char *s, int c);
 功能:在字符指针s指向的字符串中,找ascii 码为c的字符
 参数:
 s:指定的字符串
 c:要查找的字符
 返回值:
 成功:找到的字符的地址
 失败:NULL
 注意:
     s指向的字符串中有多个ASCII为c的字符,则找的是第1个字符

 char *strrchr(const char *s, int c);
 功能:在s指向的字符串中,找最后一次出现的ASCII为c的字符,

六、字符串匹配函数

 #include <string.h>
 char *strstr(const char *haystack, const char *needle);

 函数说明:
 在haystack指向的字符串中查找needle指向的字符串,也是首次匹配
 
 返回值:
 找到了:找到的字符串的首地址
 没找到:返回NULL

七、字符串转换数值

 #include <stdlib.h>
 int atoi(const char *nptr);

 功能:将一个数字型字符串转化为整形数据
 
 参数:
 nptr:指定的字符串
 
 返回值:
 获取到的整形数据
例:

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

 int main(int argc, char *argv[])
 {
 //使用atoi将数字型字符串转化为整形数据
 char s1[] = "7856";
 int ret1 = atoi(s1);

 printf("ret1 = %d\n", ret1);

 //使用atof将浮点型的字符串转化为浮点型数据
 char s2[] = "3.1415926";
 double ret2 = atof(s2);

 printf("ret2 = %lf\n", ret2);

 return 0;
 }



八、字符串切割函数 

strtok函数:

#include <string.h>
 char *strtok(char *str, const char *delim);


 功能:对字符串进行切割
 
 参数:
 str:要切割的字符串
 第一次切割,就传入指定的字符串,后面所有次的切割传NULL
 delim:标识符,要根据指定的delim进行切割,切割的结果不包含delim
 
 返回值:
 返回切割下来的字符串的首地址,如果都切割完毕,则返回NULL
例:

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

 int main(int argc, char *argv[])
 {
 //使用strtok函数切割字符串
 char s[] = "111:22222:33:4444444444:5555555555555";
 char *ret;

 //第一次切割
 ret = strtok(s, ":");
 printf("ret = %s\n", ret);

 //后面所有切割时都要将strtok的第一个参数传NULL,用while,循环切割
 while((ret = strtok(NULL, ":")) != NULL)
 {
 printf("ret = %s\n", ret);
 }

 return 0;
 }



九、格式化字符串操作函数

9.1 sprintf和sscanf函数:

#include <stdio.h>
 int sprintf(char *str, const char *format, ...);

 功能:将按照格式保存的字符串复制给str
 
 参数:
 str:保存字符串
 format:同printf
 
 返回值:
 保存的字符串的字节数


 #include <stdio.h>
 
 int sscanf(const char *str, const char *format, ...);
 功能:scanf是从终端读取数据并赋值给对应变量,而sscanf是从第一个参数中读取数据
 
 参数:
 str:指定要获取内容的字符串
 format:按照格式获取数据保存在变量中
 
 返回值:
 成功获取的个数


1//sprintf和sscanf的基本用法
 void test1()
 {
 char buf[20];
 int a, b, c;

 sprintf(buf,"%d:%d:%d",2013,10,1);
 printf("buf = %s\n",buf);

 sscanf("2013:10:1", "%d:%d:%d", &a, &b, &c);
 printf("a=%d,b=%d,c=%d\n",a,b,c);
 }


9.2 sscanf高级用法:

2//sscanf高级用法
 void test2()
 {
 //1、跳过数据:%*s或%*d
 char buf1[20];
 sscanf("1234 5678","%*d %s",buf1);
 printf("%s\n",buf1);

 //2、读指定宽度的数据:%[width]s
 char buf2[20];
 sscanf("12345678","%4s ",buf2);
 printf("%s\n",buf2);

 //3、支持集合操作:只支持获取字符串
 // %[a‐z] 表示匹配a到z中任意字符(尽可能多的匹配)
 // %[aBc] 匹配a、B、c中一员,贪婪性
 // %[^aFc] 匹配非a、F、c的任意字符,贪婪性
 // %[^a‐z] 表示读取除a‐z以外的所有字符
 char buf3[20];
 sscanf("agcd32DajfDdFF","%[a‐z]",buf3);
 printf("%s\n",buf3);
 }

 十、const 

10.1 const修饰全局变量

  • 此时全局变量只能使用但是不能修改
  • 如果直接拿全局变量修改值,编译直接报错
  • 如果使用全局变量的地址修改值,运行时程序异常结束

10.2const修饰普通局部变量

  • 可以读取变量的值
  • 不能直接通过变量进行修改值,编译报错
  • 可以通过变量的地址修改值

10.3const修饰指针变量

  • 如果const修饰指针变量的类型,无法通过指针变量修改地址里面的值
  • 如果const修饰指针变量,无法修改指针变量保存的地址
  • 如果const既修饰指针变量的类型,又修饰指针变量,则只能通过原本变量修改值

十一、说明

  • 跟字符相关的一般都是str开头的
  • 一般见到_t 称为类整型 :size_t

 

posted @   i轩  阅读(169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示