使用指针反转字符串

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

指针提供了对内存的直接访问,通过使用指针,我们可以访问和操作内存中变量和数组的值和地址。在本实验中,我们将构建一个程序,使用指针变量来反转给定的字符串。

注意:你需要自己创建文件 ~/project/main.c 来练习编码,并学习如何使用 gcc 编译和运行它。

cd ~/project
## 创建 main.c
touch main.c
## 编译 main.c
gcc main.c -o main
## 运行 main
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("`C`")) -.-> c/BasicsGroup(["`Basics`"]) c(("`C`")) -.-> c/ControlFlowGroup(["`Control Flow`"]) c(("`C`")) -.-> c/CompoundTypesGroup(["`Compound Types`"]) c(("`C`")) -.-> c/PointersandMemoryGroup(["`Pointers and Memory`"]) c(("`C`")) -.-> c/UserInteractionGroup(["`User Interaction`"]) c/BasicsGroup -.-> c/variables("`Variables`") c/ControlFlowGroup -.-> c/while_loop("`While Loop`") c/CompoundTypesGroup -.-> c/arrays("`Arrays`") c/CompoundTypesGroup -.-> c/strings("`Strings`") c/PointersandMemoryGroup -.-> c/pointers("`Pointers`") c/UserInteractionGroup -.-> c/user_input("`User Input`") c/UserInteractionGroup -.-> c/output("`Output`") subgraph Lab Skills c/variables -.-> lab-123325{{"`使用指针反转字符串`"}} c/while_loop -.-> lab-123325{{"`使用指针反转字符串`"}} c/arrays -.-> lab-123325{{"`使用指针反转字符串`"}} c/strings -.-> lab-123325{{"`使用指针反转字符串`"}} c/pointers -.-> lab-123325{{"`使用指针反转字符串`"}} c/user_input -.-> lab-123325{{"`使用指针反转字符串`"}} c/output -.-> lab-123325{{"`使用指针反转字符串`"}} end

声明字符串变量

我们将从声明两个字符数组开始:一个用于存储原始字符串,另一个用于存储反转后的字符串。

char str[100];
char rev[100];

声明指针变量

现在,我们将声明两个指针变量:一个指向字符串 str 的第一个元素,另一个指向反转字符串 rev 的第一个元素。

char *sptr = str;
char *rptr = rev;

获取用户输入

我们将使用 scanf 函数要求用户输入一个他们想要反转的字符串:

printf("Enter a string: ");
scanf("%s", str);

找到字符串的末尾

我们需要找到字符串的末尾,以便可以从后向前遍历它。我们将使用一个 while 循环来递增 sptr,直到它指向字符串末尾的空字符(null character)。

while(*sptr)
{
   sptr++;
}

反转字符串

现在,我们将使用一个 while 循环来从后向前遍历字符串 str。我们将递减 sptr,从空字符移动到字符串的最后一个字符,并使用 * 操作符将每个元素的值存储到反转字符串 rev 中。

while(sptr >= str)
{
   *rptr = *sptr;
   rptr++;
   sptr--;
}

在反转字符串的末尾添加空字符

反转字符串的末尾已经到达。我们必须在反转字符串的末尾添加空字符:

*rptr = '\0';

将反转字符串复制到原始字符串

现在,我们将反转字符串复制到原始字符串中。

strcpy(str, rev);

打印反转后的字符串

最后,我们将打印出反转后的字符串。

printf("Reversed string: %s\n", str);

总结

在本实验中,我们学习了如何使用指针变量来反转给定的字符串。指针提供了对内存的直接访问,通过使用它们,我们可以访问和操作内存中变量和数组的值和地址。我们使用了一个 while 循环来从后向前遍历字符串,将反转后的字符串存储在一个新的字符数组中,并在反转字符串的末尾添加了一个空字符。最后,我们将反转后的字符串复制到原始字符串中并打印出来。

您可能感兴趣的其他 C 教程