1.什么是字符串
字符串是由数字、字母、标点符号组成的一串字符,在C语言中,字符串没有专属的数据类型,而是基于字符类型进行表示的,他的存储分为内存存储与数组存储两种形式。
(1)内存存储
内存存储是指用指针给出字符串首元素的地址,而后连续的内存空间中为字符串
字符串"abc"的长度为4。因为在"abc"后还存在"\0"作为结束标志,"\0"占一字节
(2)数组存储:字符数组
数组存储是指将字符串保存在数组中
!!!注意数组定义的大小要考虑"\0"的位置!!!
2.字符串的赋值
字符串的赋值可以有两种方式
#include<stdio.h>
#include<string.h>
void main()
{
char arr[4] = { 'a','b','c'};
char brr[4] = { "abc" };
printf("字符串的长度:%ld\n字符串的长度:%ld", sizeof(arr),sizeof(brr));
}
第一种是对字符数组的每一个单元赋值
第二种是直接对字符数组整体赋值
二者的结果是一样的
3.字符串操作函数 --- str系列函数
!!!str系列函数都包含在"string.h"头文件中
(1)字符串长度:strlen
!!!sizeof和strlen不同!!! strlen输出的字符串长度不包括"\0"
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "Hello World!";
int length = strlen(arr);
printf("字符串长度:%d", length);
}
(2)字符串链接:strcat
strcat
函数用于追加字符串。它接受两个字符串作为参数,把第二个字符串复制一份添加到第一个字符串的末尾。这个函数会改变第一个字符串,但是第二个字符串不变。
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "Hello";
char brr[] = " World!";
char *crr = strcat(arr, brr);
printf("字符串为:%s", crr);
}
(3)字符串比较:strcmp、strncmp
strcmp函数按照字典顺序比较两个字符串的大小。
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "Hello";
char brr[] = "World";
int result = strcmp(arr, brr);
if (1 == result)
printf("result true:%d", result);
else
printf("result err:%d", result);
return 0;
}
strncmp函数按照字典顺序比较指定位数的字符串的大小
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "Hello";
char brr[] = "Hello World";
int result = strncmp(arr, brr, 5);
if (1 == result)
printf("result true:%d", result);
else
printf("result err:%d", result);
return 0;
}
(4)字符串复制:strcpy、strncpy
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abc";
char brr[40] = { 0 };
printf("arr: %s\nbrr: %s\n", arr, brr);
strcpy(brr,arr);
printf("arr: %s\nbrr: %s\n", arr,brr);
return 0;
}
strncpy函数用于指定位数的字符串的复制。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abc";
char brr[40] = { 0 };
strncpy(brr, arr, 1);
printf("arr: %s\nbrr: %s\n", arr, brr);
return 0;
}
(5)字符串分割:strtok
strtok函数用于字符串的分割
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "aaa bbb ccc";
char brr[2] = " ";
char* crr = strtok(arr, brr);
while (NULL != crr)
{
printf("%s\n", crr);
crr = strtok(NULL, brr);
}
return 0;
}
(6)字符串查找:strstr
strstr函数用于字符串str1中查找是否含有字符串str2,如果存在,返回str2在str1中第一次出现的地址;否则返回NULL
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abcdef";
char brr[] = "bc";
char* crr = strstr(arr, brr);
printf("%s\n", crr);
return 0;
}