C语言实现字符串逆序输出

4星 · 超过85%的资源 需积分: 47 23 下载量 31 浏览量 更新于2024-11-05 收藏 917B TXT 举报
"逆序输出任意字符串的C语言实现" 在编程中,逆序输出字符串是一项常见的操作,它涉及对字符数组的处理。本示例提供了一个C语言的程序,用于逆序输出用户输入的任意字符串。这个程序的核心在于定义了一个名为`reverse`的函数,该函数接受一个字符指针作为参数,然后对输入的字符串进行就地翻转。 首先,我们来看`reverse`函数的实现。函数通过两个指针`a`和`p`来完成字符串的翻转。这里的`for`循环遍历字符串的一半长度(`strlen(a)/2`),将每个字符与它对应位置的末尾字符交换。这样,原始字符串的首字符会移动到末尾,末尾字符会移动到首位,实现了字符串的逆序。 ```c void reverse(char* a) { char p; for (int i = 0; i < (int)(strlen(a) / 2); i++) { p = a[i]; a[i] = a[strlen(a) - i - 1]; a[strlen(a) - i - 1] = p; } } ``` 接下来,`main`函数是程序的入口点,它负责获取用户输入并调用`reverse`函数进行字符串翻转。首先,分配了两个空的字符指针`a`和`p`,然后通过`getchar()`函数读取用户的输入,直到遇到换行符(ASCII值为10)为止。每次读取一个字符,程序都会动态地调整内存分配,将新字符添加到`a`的末尾,并更新`p`指向新的字符串。 ```c int main() { char* a = NULL, * p = NULL; char c; int i = 1; printf("请输入字符串:\n"); p = (char*)malloc(sizeof(char*)); p[0] = '\0'; // 获取用户输入 while ((c = getchar()) != 10) { i++; a = (char*)malloc(sizeof(char*) * (i)); if (a == NULL) printf("内存分配失败!"); for (int j = 0; j < i - 1; j++) a[j] = p[j]; a[j - 1] = c; a[j] = '\0'; p = a; } // 调用reverse函数翻转字符串 reverse(a); // 打印逆序后的字符串 printf("翻转后的字符串:\n"); puts(a); return 0; } ``` 在这个程序中,`main`函数的注释部分还提供了一种替代方法来实现字符串的逆序,即先创建一个新的字符数组存储旧字符串,然后在新数组中添加新字符。然而,这个方法并未被实际使用,而是被注释掉了。这种方法虽然可行,但在效率上不如原程序中的就地翻转。 总结来说,这个程序展示了如何在C语言中实现一个简单的逆序字符串的功能。它通过动态内存分配和字符指针的巧妙使用,有效地处理了用户输入的任意长度字符串。在实际应用中,可以针对不同的需求进行优化,比如使用更高效的字符串处理库函数或优化内存管理。