C 字符串


C语言中没有string这种数据类型,字符串内部实现是一个以空字符'\0'结尾的字符数组。'\0'字符用来表示字符串的结束。


创建字符串

有3种方式创建字符串:

  • char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};
  • char a2[] = "hello";,这种方式编译器会自动在字符数组"hello"后面添加一个'\0'字符。
  • char *p = "apple";,指针p指向字符数组“apple”。

下面是创建字符串的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};
    char a2[] = "world";
    char *p = "apple";

    printf("a : %s \n", a);   // hello
    printf("a2 : %s \n", a2); // world
    printf("p : %s \n", p);   // apple

    return 0;
}

字符串长度

strlen函数用来得到字符串中字符的个数,不包含结束字符'\0'。

#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
    char a[] = "hello";

    int len = strlen(a);
    printf("Length of a : %d \n", len); // 5

    return 0;
}

合并字符串

可以通过两种方式合并字符串: 通过将多个字符串字面量分成多行。 通过strcat函数合并字符串。

下面是合并字符串的例子:

#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
    char a[] = "hello "
               "world";

    char a2[11] = "Hello";
    char a3[] = "World";
    strcat(a2, a3);

    printf("a : %s \n", a);   // hello world
    printf("a2 : %s \n", a2); // HelloWorld

    return 0;
}

复制字符串

strcpy函数用来将来源数组的内容复制到目的数组,包含结束字符'\0'。目的数组必须保证能容纳来源数组。

下面是复制字符串的例子:

#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
    char a[10] = "apple";

    strcpy(a, "banana");
    printf("a : %s \n", a); // banana

    return 0;
}

比较字符串

strcmp函数用来比较两个字符串。如果两个字符串相等,返回0;如果第一个字符串大于第二个字符串,返回值大于0;否则返回值小于0。

下面是比较字符串的例子:

#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
    if (strcmp("apple", "banana") < 0)
        printf("apple < banana \n");  // apple < banana
    else if (!strcmp("apple", "banana"))
        printf("apple == banana \n");
    else
        printf("apple > banana \n");

    return 0;
}

格式化字符串

sprintf函数用来格式化字符串,将格式化的字符串保存到一个字符串。printf函数用于输出格式化字符串。

下面是格式化字符串的例子:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    char buf[50];
    int n;

    n = sprintf(buf, "%d+%d=%d", 1, 2, 1 + 2);
    printf("Length of %s : %d \n", buf, n); // 3 : 5 

    return 0;
}