使用指针算法反转字符串
Posted
技术标签:
【中文标题】使用指针算法反转字符串【英文标题】:Reverse string using pointer arithmetic 【发布时间】:2021-10-11 01:15:33 【问题描述】:我试图了解以下函数 *reverseString(const char *str) 如何使用指针算术反转字符串。我一直在谷歌搜索并观看处理类似案件的视频,但不幸的是他们没有帮助我。 你能帮我理解这个功能是如何工作的吗? 我正在使用带有 Visual Studio Community 2019 的 Windows 10 Pro(64 位)。提前感谢您一如既往的帮助。我很感激。
#include <iostream>
#include <cstring>
using namespace std;
char *reverseString(const char *str)
int len = strlen(str); // length = 10
char *result = new char[len + 1]; // dynamically allocate memory for char[len + 1] = 11
char *res = result + len; // length of res = 11 + 10 = 21?
*res-- = '\0'; // subtracting ending null character from *res ?
while (*str)
*res-- = *str++; // swapping character?
return result; // why not res?
int main()
const char* str = "Constantin";
cout << reverseString(str) << endl;
【问题讨论】:
【参考方案1】: char *result = new char[len + 1];
这一行分配一个新字符串(另一个字符串的字符长度,加上一个用于终止的空值),并将其存储在result
中。注意result
指向字符串的开头,不会被修改。
char *res = result + len;
这一行使res
指向result
的末尾:res
是一个指针,它等于result
的地址,但len
后面有字符。
*res-- = '\0';
这一行:
将终止NULL写入res
,当前指向result
的结尾,并且
递减res
,使其现在指向结果的前一个字符
while (*str)
*res-- = *str++; // swapping character?
这些行:
循环直到str
指向NULL
将str
指向的字符写入res
指向的目标内存,并
res--
:递减 res
以指向内存中的前一个位置,并且
str++
:递增str
以指向str
的下一个字符
return result; // why not res?
返回结果是因为它指向新字符串的(开头)。
【讨论】:
非常感谢您的解释@uuser9596600!很清楚我缺少什么来理解这个功能。我需要了解指针的工作原理。以上是关于使用指针算法反转字符串的主要内容,如果未能解决你的问题,请参考以下文章