📜  C中的字符串(1)

📅  最后修改于: 2023-12-03 15:00:11.771000             🧑  作者: Mango

C中的字符串

在C语言中,字符串是一系列字符的数组,以空字符\0结尾。字符串可以用双引号"或单引号'括起来,如下所示:

char str1[] = "This is a string";
char str2[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '\0'};

可以看到,用双引号括起来的字符串会自动在结尾处添加一个空字符\0,而单引号括起来的字符数组则需要手动添加。

字符串的常用操作
字符串的赋值

C中字符串的赋值可以用=strcpy()函数。例如:

char str1[] = "This is a string";  // 字符串赋值
char str2[20];                     // 声明一个字符数组
strcpy(str2, str1);                // 将str1复制到str2
字符串的比较

C中字符串的比较有strcmp()函数。例如:

char str1[] = "This is a string";
char str2[] = "This is another string";
int result = strcmp(str1, str2);  // 比较两个字符串,返回一个整数值
if (result == 0) {
    printf("The two strings are equal.\n");
} else if (result < 0) {
    printf("The first string is less than the second.\n");
} else {
    printf("The first string is greater than the second.\n");
}
字符串的连接

C中字符串的连接可以用strcat()函数。例如:

char str1[] = "This is a string";
char str2[] = " and this is another string.";
strcat(str1, str2);      // 将str2连接到str1的结尾
printf("The concatenated string is: %s\n", str1);
字符串的截取

C中可以用strncpy()函数将一个字符串中的一部分复制到另一个字符数组中,例如:

char str1[] = "ABCDEFG";
char str2[4];
strncpy(str2, str1 + 2, 3);    // 将str1中下标从2开始的三个字符复制到str2中
str2[3] = '\0';               // 需要手动添加结尾的空字符
printf("Copied string is: %s\n", str2);  // 输出"ABC"

另外,也可以用strtok()函数将一个字符串分成多个子字符串:

char str[] = "This is a string";
char* token = strtok(str, " ");   // 分割字符串,以空格为分隔符
while (token != NULL) {
    printf("%s\n", token);
    token = strtok(NULL, " ");   // 继续分割,以NULL为终止符
}
字符串的常见问题
字符串长度不够

在C中,字符数组必须预留足够的空间来存储字符串,如果长度不够就会出现问题。例如:

char str1[] = "This is a string";
char str2[10];

strcpy(str2, str1);   // 复制字符串
printf("%s\n", str2);  // 输出"This is a"

可以看到,由于字符数组str2长度不够,复制字符串时只能存储部分字符串。

字符串的修改

C中的字符串是字符数组,可以通过修改数组元素的方式来修改字符串。例如:

char str[] = "This is a string";
str[5] = 'X';     // 修改第6个字符为'X'
printf("%s\n", str);   // 输出"This Xs a string"

但需要注意,如果修改后的字符串长度超过了原字符串长度,就需要重新分配内存。

字符串的输入输出

在C中,可以使用printf()函数输出字符串,使用scanf()函数输入字符串。例如:

char str[20];
printf("Please enter a string: ");
scanf("%s", str);   // 输入字符串
printf("You entered: %s\n", str);

需要注意的是,scanf()函数默认用空格作为字符串的结束符,遇到空格就停止输入。如果需要输入带空格的字符串,可以用fgets()函数代替scanf()函数。例如:

char str[20];
printf("Please enter a string: ");
fgets(str, 20, stdin);  // 输入字符串,20为最大字符数,stdin表示从标准输入流输入数据
printf("You entered: %s\n", str);