字符串
基本概念
1.概念上讲,C语言中没有字符串数据类型
2. C语言中使用字符数组来模拟字符串
3. C语言中的字符串是以’\0’结束的字符数组
4. C语言中的字符串可以分配于栈空间,堆空间或者只读存储区
#include <stdio.h>
#include <malloc.h>
int main()
{
char s1[] = {'H', 'e', 'l', 'l', 'o'}; //字符数组
char s2[] = {'H', 'e', 'l', 'l', 'o', '\0'}; //字符串
char* s3 = "Hello"; //只读存储区,不能改变
char* s4 = (char*)malloc(6*sizeof(char));//堆空间
s4[0] = 'H';
s4[1] = 'e';
s4[2] = 'l';
s4[3] = 'l';
s4[4] = 'o';
s4[5] = '\0';
free(s4);
return 0;
}
字符串长度
字符串长度 = 字符串所包含的字符的个数。
第一个’\0’字符前出现的字符个数
函数 :’strlen(a)’来获取
面试题:利用一条语句实现strlen
利用递归调用实现:
#include <stdio.h>
#include <assert.h>
size_t strlen(const char* s)
{
return ( assert(s), (*s ? (strlen(s+1) + 1) : 0) );
}
int main()
{
printf("%d\n", strlen( NULL));
return 0;
}
注意:尽量不要编写标准库中已经存在的函数
不指定长度的字符串函数
这些函数通过寻找字符串的’\0’来判断字符串长度,从而进行字符串操作
strcpy (char*, const char*);
strcat (char*, const char*);
strcmp (const char*, const char*)
//两个字符串相同,返回值=0
//1>2 ,返回值>0
//2>1 ,返回值<0
面试题 :strcpy
#include <stdio.h>
#include <assert.h>
char* strcpy(char* dst, const char* src)
{
char* ret = dst;
assert(dst && src);
while( (*dst++ = *src++) != '\0' );
return ret;
}
int main()
{
char dst[20];
printf("%s\n", strcpy(dst, "Delphi Tang!"));
return 0;
}
指定长度的字符串函数
这些函数通过指定长度参数,从而进行字符串操作
char* strncpy (char*, const char*,size_t len);
//复制<len时 ,剩余空间用'\0'填充
//复制>len时 ,复制len个字符 ,且不用'\0'结尾
char* strncat (char*, const char*,size_t len);
总在结果字符串后面添加'\0'
char* strncmp (const char*, const char*,size_t len)
//两个字符串相同,返回值=0
//1>2 ,返回值>0
//2>1 ,返回值<0