仅使用指针反转字符串/字符序列
||
我正在做一个作业,要求我自己使用指向序列“ \”的指针和指向“ \”的指针来反转字符序列,该字符序列可以是任何给定类型。序列。
在当前版本中,我首先尝试切换\“ front \”和\“ end \”字符。但是,我在运行时收到“访问冲突”。
我目前的代码:
#include <cstdlib>
#include <string>
#include <iostream>
using namespace std;
class StrReverse
{
public:
StrReverse(); //default constructor
void revStr(); //reverses a given c-string
private:
typedef char* CharPtr;
CharPtr front;
CharPtr end;
CharPtr cStr;
};
int main()
{
StrReverse temp = StrReverse();
temp.revStr();
system(\"pause\");
return 0;
}
//default constructor
StrReverse::StrReverse()
{
cStr = \"aDb3EfgZ\";
front = new char;
end = new char;
}
//reverses a given string
void StrReverse::revStr()
{
for(int i = 0;i < 4;i++)
{
front = (cStr + i);
end = (cStr + (7 - i));
*front = *end;
}
}
这个问题的关键限制是必须使用指针来完成反转。我意识到简单地反转一个字符串是微不足道的,但是这种限制让我挠头。任何建设性的意见将不胜感激!
没有找到相关结果
已邀请:
4 个回复
良阑纠苫
分配给
,并且字符串文字不能被修改。您的编译器很可能会将字符串文字存储在只读存储器中,并且当您尝试写入
时,会因此而发生访问冲突。 要获取可修改的字符串,请复制文字。例如:
有关更多详细信息,请参见此问题以及“链接的”部分中提到的问题。
土投
而且您不需要索引,因为您已经有了指针。您 可以只增加和减少指针。 另外,为什么还要在构造函数中分配内存。你的记忆 永远不要使用(或免费)。 最后,您并没有真正使循环中的任何内容逆。你需要 交换字符,而不仅仅是将最后一个复制到 开始。 至于访问冲突:字符串文字是一个常量。您 无法修改。如果要进行相反的操作,则需要 将字符串复制到其他位置(或使用它初始化数组)。
稳赣苍卯改
循环遍历字符串以找到结尾,然后从字符串的大小为
,您可以使用它分配临时缓冲区,因此您可以执行
,然后释放旧字符串并设置临时缓冲区作为新字符串
梦砍废么