介绍
在本实验中,你将学习如何在 C 编程中创建和操作字符串。你将探索不同的方法来定义字符串,使用 printf 格式化字符串,使用 strlen 确定字符串长度,并使用 strncmp 比较字符串。这些基本的字符串操作对于构建健壮且灵活的 C 应用程序至关重要。
本实验涵盖以下步骤:使用指针表示法定义字符串,使用局部数组表示法定义字符串,使用 printf 格式化字符串,使用 strlen 确定字符串长度,以及使用 strncmp 比较字符串。通过本实验,你将对 C 语言中的字符串操作有扎实的理解,并能够将这些技术应用到自己的项目中。
使用指针表示法定义字符串
在这一步骤中,你将学习如何在 C 语言中使用指针表示法定义字符串。指针表示法为 C 编程中创建和操作字符串提供了一种灵活的方式。
首先,我们创建一个新文件来演示如何使用指针表示法定义字符串:
cd ~/project
touch string_pointer.c
现在,输入以下代码:
#include <stdio.h>
int main() {
// 使用指针表示法定义字符串
char *greeting = "Hello, C Programming!";
// 打印字符串
printf("Greeting: %s\n", greeting);
return 0;
}
编译并运行程序:
gcc string_pointer.c -o string_pointer
./string_pointer
示例输出:
Greeting: Hello, C Programming!
让我们分解代码:
char *greeting声明了一个指向字符(字符串)的指针"Hello, C Programming!"是一个存储在内存中的字符串字面量- 指针
greeting指向字符串的第一个字符 printf()使用%s格式说明符打印整个字符串
你还可以修改指针以指向字符串的不同部分:
#include <stdio.h>
int main() {
char *greeting = "Hello, C Programming!";
// 指向字符串的特定部分
char *partial = greeting + 7;
printf("Original string: %s\n", greeting);
printf("Partial string: %s\n", partial);
return 0;
}
示例输出:
Original string: Hello, C Programming!
Partial string: C Programming!
使用局部数组表示法定义字符串
在这一步骤中,你将学习如何在 C 语言中使用局部数组表示法定义字符串。这种方法提供了另一种创建和初始化字符串的方式,能够更直接地控制字符数组。
让我们创建一个新文件来演示如何使用局部数组表示法定义字符串:
cd ~/project
touch string_array.c
输入以下代码:
#include <stdio.h>
int main() {
// 使用局部数组表示法定义字符串
char greeting[30] = "Hello, C Programming!";
// 打印字符串
printf("Greeting: %s\n", greeting);
return 0;
}
编译并运行程序:
gcc string_array.c -o string_array
./string_array
示例输出:
Greeting: Hello, C Programming!
让我们探索局部数组表示法的一些变体:
#include <stdio.h>
int main() {
// 显式初始化数组
char name[10] = {'J', 'o', 'h', 'n', '\0'};
// 部分初始化数组
char city[20] = "New York";
// 不指定数组大小
char message[] = "Welcome to C Programming!";
printf("Name: %s\n", name);
printf("City: %s\n", city);
printf("Message: %s\n", message);
return 0;
}
示例输出:
Name: John
City: New York
Message: Welcome to C Programming!
关于局部数组表示法的关键点:
- 你可以显式指定数组大小
'\0'(空终止符)对于标记字符串的结尾至关重要- 数组可以使用单个字符或字符串字面量进行初始化
- 当未完全初始化时,剩余元素会被设置为零
使用 printf 格式化字符串
在这一步骤中,你将学习如何使用 printf() 在 C 语言中格式化字符串和各种数据类型。printf() 函数提供了强大的字符串格式化功能。
让我们创建一个新文件来演示字符串格式化:
cd ~/project
touch string_formatting.c
输入以下代码以探索不同的格式化选项:
#include <stdio.h>
int main() {
// 基本字符串格式化
char name[] = "Alice";
int age = 30;
float height = 5.8;
// 简单字符串输出
printf("Name: %s\n", name);
// 多变量格式化
printf("Profile: %s is %d years old\n", name, age);
// 浮点数精度格式化
printf("Height: %.1f meters\n", height);
// 宽度和对齐
printf("Name (right-aligned): %10s\n", name);
printf("Name (left-aligned): %-10s\n", name);
// 混合不同的格式说明符
printf("Details: %s, %d years, %.1f meters\n", name, age, height);
return 0;
}
编译并运行程序:
gcc string_formatting.c -o string_formatting
./string_formatting
示例输出:
Name: Alice
Profile: Alice is 30 years old
Height: 5.8 meters
Name (right-aligned): Alice
Name (left-aligned): Alice
Details: Alice, 30 years, 5.8 meters
常见的格式说明符:
%s: 字符串%d: 整数%f: 浮点数%.1f: 保留一位小数的浮点数%10s: 右对齐,宽度为 10 个字符%-10s: 左对齐,宽度为 10 个字符
让我们探索更高级的格式化:
#include <stdio.h>
int main() {
// 十六进制和八进制表示
int number = 255;
printf("Decimal: %d\n", number);
printf("Hexadecimal: %x\n", number);
printf("Octal: %o\n", number);
// 使用零填充
printf("Padded number: %05d\n", 42);
return 0;
}
示例输出:
Decimal: 255
Hexadecimal: ff
Octal: 377
Padded number: 00042
使用 strlen 确定字符串长度
在这一步骤中,你将学习如何使用 strlen() 函数来确定 C 语言中字符串的长度。strlen() 函数是 <string.h> 库的一部分,提供了一种简单的方法来计算字符串中的字符数。
让我们创建一个新文件来演示字符串长度的计算:
cd ~/project
touch string_length.c
输入以下代码以探索 strlen():
#include <stdio.h>
#include <string.h>
int main() {
// 定义不同长度的字符串
char greeting[] = "Hello, World!";
char name[] = "Alice";
char empty[] = "";
// 计算并打印字符串长度
printf("Greeting: %s\n", greeting);
printf("Greeting length: %lu characters\n", strlen(greeting));
printf("Name: %s\n", name);
printf("Name length: %lu characters\n", strlen(name));
printf("Empty string length: %lu characters\n", strlen(empty));
return 0;
}
编译并运行程序:
gcc string_length.c -o string_length
./string_length
示例输出:
Greeting: Hello, World!
Greeting length: 13 characters
Name: Alice
Name length: 5 characters
Empty string length: 0 characters
让我们探索一个更实际的 strlen() 使用示例:
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("Enter a string: ");
fgets(input, sizeof(input), stdin);
// 如果存在换行符,则移除
input[strcspn(input, "\n")] = 0;
// 计算并打印字符串长度
size_t length = strlen(input);
printf("You entered: %s\n", input);
printf("String length: %lu characters\n", length);
// 演示基于长度的操作
if (length > 10) {
printf("This is a long string!\n");
} else if (length > 0) {
printf("This is a short string.\n");
} else {
printf("You entered an empty string.\n");
}
return 0;
}
关于 strlen() 的关键点:
- 返回空终止符之前的字符数
- 不计算空终止符
- 适用于字符数组和字符串字面量
- 属于
<string.h>库,因此需要包含此头文件 - 返回
size_t类型(无符号长整型)
使用 strncmp 比较字符串
在这一步骤中,你将学习如何使用 strncmp() 函数在 C 语言中比较字符串。strncmp() 函数允许你比较两个字符串中指定数量的字符。
让我们创建一个新文件来演示字符串比较:
cd ~/project
touch string_compare.c
输入以下代码以探索 strncmp():
#include <stdio.h>
#include <string.h>
int main() {
// 定义用于比较的字符串
char str1[] = "Hello, World!";
char str2[] = "Hello, Everyone!";
char str3[] = "Hello, World!";
// 比较整个字符串
printf("Full string comparison:\n");
int result1 = strncmp(str1, str2, strlen(str1));
int result2 = strncmp(str1, str3, strlen(str1));
printf("str1 vs str2: %d\n", result1);
printf("str1 vs str3: %d\n", result2);
// 比较前几个字符
printf("\nPartial string comparison:\n");
int result3 = strncmp(str1, str2, 7);
printf("First 7 characters of str1 vs str2: %d\n", result3);
return 0;
}
编译并运行程序:
gcc string_compare.c -o string_compare
./string_compare
示例输出:
Full string comparison:
str1 vs str2: -1
str1 vs str3: 0
Partial string comparison:
First 7 characters of str1 vs str2: 0
让我们创建一个更实际的字符串比较示例:
#include <stdio.h>
#include <string.h>
int main() {
// 密码验证示例
char stored_password[] = "SecretPass123";
char input_password[20];
printf("Enter password: ");
scanf("%19s", input_password);
// 比较密码的前 10 个字符
int comparison = strncmp(stored_password, input_password, 10);
if (comparison == 0) {
printf("Access granted!\n");
} else {
printf("Access denied!\n");
}
return 0;
}
关于 strncmp() 的关键点:
- 比较指定数量的字符
- 如果字符串在指定长度内匹配,则返回 0
- 如果第一个字符串在字典序上小于第二个字符串,则返回负值
- 如果第一个字符串在字典序上大于第二个字符串,则返回正值
- 属于
<string.h>库 - 适用于部分字符串比较
理解 strncmp() 的返回值:
- 0:字符串在指定长度内相等
- < 0:第一个字符串在第二个字符串之前
0:第一个字符串在第二个字符串之后
总结
在本实验中,你学习了如何在 C 编程中使用指针表示法和局部数组表示法定义字符串。通过指针表示法,你可以使用字符指针灵活地创建和操作字符串。通过局部数组表示法,你可以更直接地控制字符数组。你还学习了如何使用 printf() 格式化字符串,使用 strlen() 确定字符串长度,以及使用 strncmp() 比较字符串。这些字符串操作技术是处理 C 语言中文本数据的基本技能。



