字符数组和字符串是C语言处理文本数据的基础。东巴文(db-w.cn) 将带你深入理解字符数组与字符串,掌握文本处理的核心技能。
💡 东巴文观点:字符数组是存储字符的数组,字符串是以空字符结尾的字符数组,是C语言文本处理的基础。
东巴文说明:字符数组是存储字符类型数据的数组。
东巴文说明:字符串是以空字符 \0 结尾的字符数组。
东巴文字符数组与字符串特点:
字符数组
├── 存储字符类型
├── 可以没有'\0'
├── 长度固定
└── 可逐字符处理
字符串
├── 以'\0'结尾
├── 可用字符串函数
├── 可用双引号初始化
└── 长度可变(在数组范围内)
#include <stdio.h>
int main() {
printf("=== 东巴文字符数组声明 ===\n\n");
// 声明字符数组
char arr1[10]; // 声明但不初始化
// 声明并初始化
char arr2[5] = {'H', 'e', 'l', 'l', 'o'};
// 部分初始化
char arr3[10] = {'H', 'i'}; // 其余为'\0'
// 自动推断长度
char arr4[] = {'H', 'e', 'l', 'l', 'o'};
printf("arr2: ");
for (int i = 0; i < 5; i++) {
printf("%c", arr2[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符数组初始化 ===\n\n");
// 方式1:逐字符初始化
char arr1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// 方式2:字符串字面量
char arr2[6] = "Hello";
// 方式3:自动推断长度
char arr3[] = "Hello";
// 方式4:部分初始化
char arr4[10] = "Hi";
printf("arr1: %s\n", arr1);
printf("arr2: %s\n", arr2);
printf("arr3: %s\n", arr3);
printf("arr4: %s\n", arr4);
return 0;
}
东巴文说明:
\0\0 结尾\0#include <stdio.h>
int main() {
printf("=== 东巴文字符串创建 ===\n\n");
// 字符数组方式
char str1[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// 字符串字面量
char str2[6] = "Hello";
// 自动推断长度
char str3[] = "Hello";
// 指针方式
char *str4 = "Hello";
printf("str1: %s\n", str1);
printf("str2: %s\n", str2);
printf("str3: %s\n", str3);
printf("str4: %s\n", str4);
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串存储 ===\n\n");
char str[] = "Hello";
printf("字符串:%s\n", str);
printf("字符串长度:%zu\n", strlen(str));
printf("数组大小:%zu 字节\n", sizeof(str));
printf("\n字符存储:\n");
for (int i = 0; i <= strlen(str); i++) {
printf("str[%d] = '%c' (ASCII: %d)\n", i, str[i], str[i]);
}
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符数组与字符串的区别 ===\n\n");
// 字符数组(不是字符串)
char arr1[5] = {'H', 'e', 'l', 'l', 'o'};
// 字符串
char arr2[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
printf("字符数组arr1:\n");
printf(" sizeof(arr1) = %zu\n", sizeof(arr1));
printf(" 逐字符输出: ");
for (int i = 0; i < 5; i++) {
printf("%c", arr1[i]);
}
printf("\n");
printf("\n字符串arr2:\n");
printf(" sizeof(arr2) = %zu\n", sizeof(arr2));
printf(" strlen(arr2) = %zu\n", strlen(arr2));
printf(" 字符串输出: %s\n", arr2);
return 0;
}
东巴文说明:
\0\0 结尾#include <stdio.h>
int main() {
printf("=== 东巴文字符数组输入 ===\n\n");
char arr[20];
// 逐字符输入
printf("请输入5个字符:\n");
for (int i = 0; i < 5; i++) {
scanf(" %c", &arr[i]); // 注意空格,跳过空白字符
}
printf("输入的字符:");
for (int i = 0; i < 5; i++) {
printf("%c", arr[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符数组输出 ===\n\n");
char arr[] = {'H', 'e', 'l', 'l', 'o'};
int size = sizeof(arr) / sizeof(arr[0]);
// 逐字符输出
printf("逐字符输出:");
for (int i = 0; i < size; i++) {
printf("%c", arr[i]);
}
printf("\n");
// putchar输出
printf("putchar输出:");
for (int i = 0; i < size; i++) {
putchar(arr[i]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符数组遍历 ===\n\n");
char arr[] = "东巴文";
printf("字符数组:\n");
for (int i = 0; arr[i] != '\0'; i++) {
printf("arr[%d] = '%c' (ASCII: %d)\n", i, arr[i], arr[i]);
}
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符串输入 ===\n\n");
char str[50];
// scanf输入(遇到空格停止)
printf("请输入一个单词:\n");
scanf("%s", str);
printf("scanf输入:%s\n", str);
// 清空输入缓冲区
while (getchar() != '\n');
// fgets输入(可以包含空格)
printf("\n请输入一行文本:\n");
fgets(str, sizeof(str), stdin);
printf("fgets输入:%s", str);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符串输出 ===\n\n");
char str[] = "东巴文欢迎您";
// printf输出
printf("printf: %s\n", str);
// puts输出(自动换行)
printf("puts: ");
puts(str);
// fputs输出(不自动换行)
printf("fputs: ");
fputs(str, stdout);
printf("\n");
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串长度 ===\n\n");
char str[] = "Hello, 东巴文";
// strlen: 字符串长度
printf("字符串:%s\n", str);
printf("strlen: %zu\n", strlen(str));
// sizeof: 数组大小
printf("sizeof: %zu 字节\n", sizeof(str));
// 手动计算长度
int len = 0;
while (str[len] != '\0') {
len++;
}
printf("手动计算: %d\n", len);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符统计 ===\n\n");
char str[] = "Hello, 东巴文!";
int letters = 0, digits = 0, spaces = 0, others = 0;
for (int i = 0; str[i] != '\0'; i++) {
if ((str[i] >= 'a' && str[i] <= 'z') ||
(str[i] >= 'A' && str[i] <= 'Z')) {
letters++;
} else if (str[i] >= '0' && str[i] <= '9') {
digits++;
} else if (str[i] == ' ') {
spaces++;
} else {
others++;
}
}
printf("字符串:%s\n", str);
printf("字母:%d\n", letters);
printf("数字:%d\n", digits);
printf("空格:%d\n", spaces);
printf("其他:%d\n", others);
return 0;
}
#include <stdio.h>
#include <string.h>
void reverseString(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() {
printf("=== 东巴文字符串反转 ===\n\n");
char str[] = "Hello, 东巴文";
printf("原字符串:%s\n", str);
reverseString(str);
printf("反转后:%s\n", str);
return 0;
}
#include <stdio.h>
#include <ctype.h>
#include <string.h>
void toUpperCase(char str[]) {
for (int i = 0; str[i] != '\0'; i++) {
str[i] = toupper(str[i]);
}
}
void toLowerCase(char str[]) {
for (int i = 0; str[i] != '\0'; i++) {
str[i] = tolower(str[i]);
}
}
int main() {
printf("=== 东巴文字符串大小写转换 ===\n\n");
char str1[] = "Hello, 东巴文";
char str2[] = "Hello, 东巴文";
printf("原字符串:%s\n", str1);
toUpperCase(str1);
printf("转大写:%s\n", str1);
toLowerCase(str2);
printf("转小写:%s\n", str2);
return 0;
}
#include <stdio.h>
#include <string.h>
void trim(char str[]) {
int len = strlen(str);
int start = 0;
int end = len - 1;
// 去除前导空格
while (str[start] == ' ') {
start++;
}
// 去除尾部空格
while (end >= 0 && str[end] == ' ') {
end--;
}
// 移动字符
int j = 0;
for (int i = start; i <= end; i++) {
str[j++] = str[i];
}
str[j] = '\0';
}
int main() {
printf("=== 东巴文字符串去空格 ===\n\n");
char str[] = " Hello, 东巴文 ";
printf("原字符串:\"%s\"\n", str);
printf("长度:%zu\n", strlen(str));
trim(str);
printf("去空格后:\"%s\"\n", str);
printf("长度:%zu\n", strlen(str));
return 0;
}
#include <stdio.h>
// 打印字符数组
void printCharArray(char arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%c", arr[i]);
}
printf("\n");
}
// 修改字符数组
void toUpper(char arr[], int size) {
for (int i = 0; i < size; i++) {
if (arr[i] >= 'a' && arr[i] <= 'z') {
arr[i] -= 32;
}
}
}
int main() {
printf("=== 东巴文字符数组与函数 ===\n\n");
char arr[] = {'h', 'e', 'l', 'l', 'o'};
int size = sizeof(arr) / sizeof(arr[0]);
printf("原字符数组:");
printCharArray(arr, size);
toUpper(arr, size);
printf("转大写后:");
printCharArray(arr, size);
return 0;
}
#include <stdio.h>
#include <string.h>
// 打印字符串
void printString(char str[]) {
printf("%s\n", str);
}
// 字符串长度
int stringLength(char str[]) {
int len = 0;
while (str[len] != '\0') {
len++;
}
return len;
}
// 字符串连接
void stringConcat(char dest[], char src[]) {
int destLen = stringLength(dest);
int i = 0;
while (src[i] != '\0') {
dest[destLen + i] = src[i];
i++;
}
dest[destLen + i] = '\0';
}
int main() {
printf("=== 东巴文字符串与函数 ===\n\n");
char str1[50] = "Hello, ";
char str2[] = "东巴文";
printf("str1: ");
printString(str1);
printf("str2: ");
printString(str2);
stringConcat(str1, str2);
printf("连接后: ");
printString(str1);
printf("长度: %d\n", stringLength(str1));
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
printf("=== 东巴文字符串空间管理 ===\n\n");
// ✅ 正确:确保有足够空间
char dest[20];
char src[] = "东巴文";
strcpy(dest, src);
printf("复制成功:%s\n", dest);
// ✅ 推荐:使用strncpy限制长度
char dest2[10];
strncpy(dest2, src, sizeof(dest2) - 1);
dest2[sizeof(dest2) - 1] = '\0';
printf("安全复制:%s\n", dest2);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符串初始化 ===\n\n");
// ✅ 推荐:初始化为空字符串
char str1[50] = "";
// ✅ 推荐:初始化为指定字符串
char str2[50] = "东巴文";
printf("str1: \"%s\"\n", str1);
printf("str2: \"%s\"\n", str2);
return 0;
}
#include <stdio.h>
int main() {
printf("=== 东巴文字符串输入安全 ===\n\n");
char str[10];
// ✅ 推荐:使用fgets限制输入长度
printf("请输入字符串(最多9个字符):\n");
fgets(str, sizeof(str), stdin);
// 去除换行符
int len = 0;
while (str[len] != '\0' && str[len] != '\n') {
len++;
}
str[len] = '\0';
printf("输入的字符串:\"%s\"\n", str);
return 0;
}
完成本章学习后,请确认:
掌握字符数组与字符串后,你可以继续学习:
如果遇到问题,欢迎访问 东巴文(db-w.cn) 获取帮助!
东巴文(db-w.cn) - 让编程学习更简单
📝 东巴文字符数组与字符串提示:字符数组和字符串是C语言文本处理的基础,掌握它们是开发文本处理程序的关键。在 db-w.cn,我们会通过大量实例帮你掌握字符数组与字符串的使用!