C语言基础学习笔记(10):字符串
图: 第一张黑洞照片(The first image of a black hole published in April 2019)
by 事件视野望远镜(Event Horizon Telescope)
Guderian出品
C
语言中没有专门的字符串数据类型。在定义字符串,字符数组的长度应比字符串长度多1
,给\0
留个位置:1
2
char str[STR_LEN+1];C
语言常用字符串处理操作函数:#include <string.h>
(1)
strlen(s);
返回字符串s
的长度(2)
strcpy(s1,s2);
复制s2
至s1
,返回s1
的指针(3)
strcat(s1,s2);
复制s2
接在s1
末尾,返回s1
的指针(4)
strcmp(s1,s2);
比较s2
和s1
的大小,返回0
表示相等,返回值大于零表示s1
比s2
大,返回值小于零表示s1
比s2
小。(比较规则:当出现第一对不相等的字符时,由这两个字符决定所在字符串的大小,返回其ASCII
码比较的差值。)(5)
strncpy(s1,s2,n);
复制s2
前面最多n
个元素至s1
中,比strcpy()
更安全(6)
strncat(s1,s2,n);
复制s2
前面最多n
个元素至s1
末尾,比strcat()
更安全(7)
strncmp(s1,s2,n);
比较s2
和s1
前面最多n
个元素的大小向函数传递字符串的两种方法:
(1)用字符数组作函数参数
(2)用字符指针作函数参数
用字符数组作函数参数示例:计算实际字符个数
1
2
3
4
5
6
7
8unsigned int MyStrlen(const char str[]) //防止原字符数组被修改
{
int i;
unsigned int len = 0;
for (i=0; str[i]!='\0'; i++)
len++;
return len;
}用字符指针作函数参数示例:计算实际字符个数
1
2
3
4
5
6
7unsigned int MyStrlen(const har *pstr) //防止原字符数组被修改
{
unsigned int len = 0;
for (; *pstr!='\0'; pstr++)
len++;
return len;
}用字符指针作函数参数示例:计算实际字符个数(Optimized versoin)
1
2
3
4
5
6
7unsigned int MyStrlen(const char *pstr) //防止原字符数组被修改
{
const char *start = pstr;
while (*pstr)
pstr++;
return pstr-start;
}用字符数组作函数参数示例:复制字符串
1
2
3
4
5
6
7
8
9
10void MyStrcpy(char dst[], char src[])
{
int i = 0;
while (src[i]!='\0')
{
dst[i] = src[i];
i++;
}
dst[i] = '\0';
}用字符指针作函数参数示例:复制字符串
1
2
3
4
5
6
7
8
9
10void MyStrcpy(char *dst, char *src)
{
while (*src!='\0')
{
*dst = *src;
src++;
dst++
}
*dst = '\0';
}用字符指针作函数参数示例:复制字符串(Insane versoin!!!)
1
2
3
4void MyStrcpy(char *dst, const char *src)
{
while (*dst++ = *src++); //空字符被赋值之后循环才结束
}不要写没人能看懂的代码!第6点、第9点和第12点的代码风格仅供欣赏!DO NOT TRY IT AT HOME!
从函数返回字符指针,如
strcpy()
和strcat()
的函数原型:strcpy()
:char *strcpy(char *dstStr, const char *srcStr);
strcat()
:char *strcat(char *dstStr, const char *srcStr);
编程实现
strcat()
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
char *MyStrcat(char *dst, char *src);
int main()
{
char s1[10] = {"123"};
char s2[] = "45";
char *res = NULL;
res = MyStrcat(s1,s2);
printf("%s",res);
return 0;
}
char *MyStrcat(char *dst, char *src)
{
char *pstr = dst;
while (*dst!='\0') dst++;
while (*dst++ = *src++);
return pstr;
}
【更多C语言系列】