字符串是计算机编程中表示文本数据的一种基本数据类型,在C语言中,字符串是以字符数组的形式实现的,并且每个字符串都以空字符\0
结尾,这个空字符标志着字符串的结束。
下面从基础到深入讲解字符串的相关知识点:
1. 字符串的定义与表示
-
字符串在C语言中使用字符数组表示,例如:
char str[10] = "hello"; // 包含'h', 'e', 'l', 'l', 'o', '\0'
这里的
str
可以容纳10个字符,但只用了6个,包括了最后的空字符\0
。 -
另一种写法:
char str[] = "world"; // 长度由编译器自动计算
2. 输入和输出字符串
-
输出字符串:使用
printf
函数。printf("%s", str);
-
输入字符串:使用
scanf
或gets
函数(注意安全问题)。char str[50]; scanf("%s", str); // 注意:scanf无法读取空格后的内容。
推荐使用
fgets
读取一整行,包括空格:fgets(str, 50, stdin); // 从输入读取最多49个字符,并添加'\0'
3. 常见的字符串操作函数
这些函数都在<string.h>
中定义,常用的有:
函数 | 功能 |
---|---|
strlen(s) |
计算字符串的长度(不包括\0 )。 |
strcpy(dest, src) |
将字符串src 复制到dest 中。 |
strcat(dest, src) |
将字符串src 追加到dest 的末尾。 |
strcmp(s1, s2) |
比较两个字符串(返回0表示相等)。 |
strstr(s1, s2) |
查找字符串s2 在s1 中的第一次出现位置。 |
例子:
#include <stdio.h>
#include <string.h>
int main() {
char s1[20] = "Hello";
char s2[] = "World";
// 字符串拼接
strcat(s1, s2);
printf("拼接后: %s\n", s1); // 输出: HelloWorld
// 计算长度
printf("长度: %lu\n", strlen(s1)); // 输出: 10
// 字符串比较
if (strcmp(s1, s2) == 0) {
printf("字符串相等\n");
} else {
printf("字符串不相等\n");
}
return 0;
}
4. 字符串的常见操作
1)反转字符串
#include <stdio.h>
#include <string.h>
void reverse(char str[]) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
}
int main() {
char str[] = "hello";
reverse(str);
printf("反转后的字符串: %s\n", str); // 输出: olleh
return 0;
}
2)查找字符
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "hello";
char *pos = strchr(str, 'l'); // 查找'l'的第一次出现
if (pos) {
printf("字符'l'第一次出现的位置: %ld\n", pos - str);
}
return 0;
}
3)分割字符串
使用strtok
函数:
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "C,is,a,programming,language";
char *token = strtok(str, ",");
while (token) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
输出:
C
is
a
programming
language
5. 注意事项
-
内存越界:定义字符串时,必须留出足够的空间存储字符和
\0
。char str[5] = "hello"; // 错误:无法存储最后的'\0'
-
安全输入:避免
gets
,推荐fgets
以防止缓冲区溢出。 -
动态分配内存:如果字符串长度不确定,可以使用动态内存分配。
char *str = (char *)malloc(50 * sizeof(char)); strcpy(str, "dynamic"); printf("%s\n", str); free(str);
6. 小练习
试着实现以下功能:
- 手动实现
strlen
函数。 - 手动实现字符串拼接(类似
strcat
)。 - 判断一个字符串是否是回文。
如果需要更详细的讲解或代码实现,欢迎继续提问!
标签:s1,char,str,printf,字符串,include From: https://www.cnblogs.com/lyx9785/p/18570746