用一组字符替换所有字符
Posted
技术标签:
【中文标题】用一组字符替换所有字符【英文标题】:Replace All Characters with a set of characters 【发布时间】:2015-09-28 23:56:37 【问题描述】:我正在尝试用另一组字符替换字符串中的每个字符
for example a -> ABC
b -> BCA
d -> CBA
但我似乎对这个看似简单的任务有问题
到目前为止我有
#include <isotream>
#include "Class.h"
#include <string>
using namespace std;
int main()
string test;
cin >> test;
Class class;
cout << class.returnString(test);
在我打电话的班级中,我有
#include "Class.h" //which has <string> <iostream> and std
static string phrase;
static string whole;
static int place;
Class::Class()
if (phrase != "")
phrase = "";
if (whole != "")
whole = "";
if (place == NULL)
place = 0;
void Class::reader(string x)
char symbol = x.at(place);
while (symbol != '\0')
place++;
replacer(symbol);
reader(x);
void Class::replacer(char x)
if (char x = 'a')
phrase = "hola";
if (char x = 'b')
phrase = "hi";
knitter();
void Class::knitter()
whole = whole + phrase;
string Class::returnString(string x)
reader(x);
return whole;
当我尝试在测试字符串中仅使用“a”运行它时,我不断收到无效的字符串位置作为错误。
【问题讨论】:
place
是一个你永远不会正确初始化的 int。在Class
的构造函数中,您检查它是否为空,但它是int
,而不是指针。所以它没有被初始化,比较的结果是未定义的,place
未设置为 0,并且在reader
中,您在place
访问字符串x
,正如所说的未定义。但是,如果您编辑问题以解释错误发生在哪一行,这将有所帮助;我猜是我指出的那个,但我还是想听听你的意见。
if (char x = 'a')
- 天哪。请打开编译器的警告。
除了@FabioTurati 和@KarolyHorvath cmets,if (char x = 'a') ...
,=
不检查相等性,它是赋值运算符。 ==
检查是否相等。更不用说x
已经在方法的签名(void Class::replacer(char x)
)中声明为char
,不要在if
语句中声明变量。
@FabioTurati 我不确定如何检查我的错误在哪里,因为我对编码比较陌生。我目前正在使用 microsoft visual studio express 2013 for windows 桌面。当我运行程序时,它启动得很好,但是当我在控制台中输入“a”并按回车时,程序崩溃了,我得到了 xmemory0 或 xstring。 (取决于我在void Class::reader(string x)
之外是否有place = 0
while loop
。在xstring
中,我被带到_Xout_of_range("invaluid string position")
。在xmemory0 中,我被带到if(_Count == 0)... else if(...)
声明
那么,使用调试器!您可以单步执行您的代码,一次一行,看看会发生什么。或者,一个懒惰的解决方案是用cout
s 填充您的代码,让您了解正在发生的事情。这是为了隔离问题出现的点。但与此同时,请检查我们指出的内容。您遇到的问题(无效的字符串位置)可能取决于我所说的(place
未初始化),但其他错误可能更糟 - 在if
中,您必须使用 double相等,即if (char x == 'a')
,否则不会做你想做的。
【参考方案1】:
在'symbol'下面的while循环中,'symbol'将永远是'a'。
void Class::reader(string x)
char symbol = x.at(place);
while (symbol != '\0')
place++;
replacer(symbol);
reader(x);
您需要在 while 循环中读取“x”,否则您的 while 循环永远不会终止。在无限程序中调用 knitter 将使“整体”看起来像:“holaholaholahola ....”,您的程序最终将耗尽堆栈内存,这可能是您收到无效字符串位置错误的原因。此外,作为一般规则,我会避免使用静态变量。如果您按以下方式更改程序,它可能会起作用:
void Class::reader(string x)
char symbol = x.at(place);
while (symbol != '\0')
place++;
replacer(symbol);
reader(x);
symbol = x.at(place);
【讨论】:
他可能也想修复void Class::replacer(char x) ...
方法...以上是关于用一组字符替换所有字符的主要内容,如果未能解决你的问题,请参考以下文章