L24c语言中的字符串

字符串

基本概念

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

猜你喜欢

转载自blog.csdn.net/shouzhoudd/article/details/46352303