C字符串

字符串是\0结尾的字符数组。

char s[] = {'h','e','l','l','o','\0'};
printf(s);

字符串字面量

字符串字面量使用双引号"包裹,编译器会为结尾填上'\0'

char s1[] = "hello world";
char s2[] = "你好世界";

字符串s1包含11个英文字符,加上结尾的'\0',共12个字符。 字符串s2包含4个汉字,1个汉字占用2个字符空间,加上结尾的'\0',共9个字符。

字符串函数

C标准库string.h提供了函数用来操作字符串。

函数 功能
strlen(char* s) 计算字符串s的长度,以字节计算,不包括末尾'\0'
strcpy(char* s1,char* s2) 复制s2到s1
strcat(char* s1,char* s2) 链接s2到s1
strcmp(char* s1,char* s2) 比较字符串s1和s2,相等返回0,s1小返回值小于0,否则返回值大于0
strchr(char* s1, char ch) 返回字符ch出现在s1中的位置。
strstr(char* s1, char s2) 返回字符串s2出现在s1中的位置。
char s[] = "你好 hello";

int size = sizeof(s);//11
int length = strlen(s);

char s2[256]={0};

strcpy(s2,s);

printf("%s\n",s2);//你好 hello

strcat(s2,s1);//将s1连接到s2末尾

printf("%s\n",s2);//你好 hello你好 hello

int n = strcmp("a","b");

printf("%d\n",n);//n<0。字符串a小于字符串b

判断字符串包含的字符个数


#define IsAscii(ch) ((ch)>=0&&(ch)<=0x80)

int strchlen(const char* s)
{
    int n = 0;

    if (s == NULL)return -1;

    char ch;
    while ((ch = *(s++)) != '\0')
    {
        if (IsAscii(ch))//ascii字符,
        {
            n++;
        }
        else {

            if (!IsAscii(s + 1)) {//连续两个字节的非ascii字符是一个中文字符
                s++;
                n++;
            }
            else {
                n++;//不合法字符
            }
        }
    }
    return n;
}

int main()
{
    char s[] = "你好 hello";
    printf("%d\n",strchlen(s));//8
    return 0;
}