c++ - 给出意外输出的字符串替换函数
问题描述
我正在编写一个代码,它将一些随机的 17 个字符串替换为一个字母表,它给了我奇怪的篡改输出。基本上,我想做的是:
从用户那里获取输入,将其放入输入变量中,输入通过 algorithm() 函数保持不变,然后进入替换函数并被替换。然后,被替换的字符串通过原始路由返回到主函数,并在其中显示。
我将数组保留为字符串类型,因为 const char* 给了我一个分段错误。
std::string Subs[53]=
{
"LQlMv]G5^^1kcm?fk",
"7W^S;/vB(6%I|w[fl",
"<w7>4f//Z55ZxK'z.",
"_W5g(lu<pTu3^_A7n",
"OfLm%8:EF}0V1?BSS",
"|+E6t,AZ~XewXP17T",
"L-nIbhm5<z:92~+,x",
"L-nIbhm5<z:92~+,x",
"9bC5f0q@qA(RKZ>|r",
"9bC5f0q@qA(RKZ>|r",
"k=5,ln(08IAl(gGAK",
"|N,8]dGu)'^MaYpu[",
"!&,Y*nz8C*,J}{+d]",
"Us9%^%?n5!~e@@*+@",
"zF8,1KV#¥]$k?|9R#",
"0B4>=nioEjp>4rhgi",
"EG@0[W9.N4i~E<f3x",
"(0Pwkk&IPchJHs.7A",
"7XgmQ6fW<|J+NY[m0",
".g4CwX/DU!!~!zbtZ",
"+_U'qn_/9Fo|gT/!n",
"=0s(mYh&F%y=MBS5(",
"cg71(}bo+Q5P8F[T6",
"lc|a\%5.9pOpooU+QR",
"E_(3A:o+.]qL3MYA6",
"H@O'X_RiVS@8l0bKD",
"Y1gbGD`~8d>HSWN35",
"LQlMv]G5^^1kcm?fk",
"T4}gI;`BFVfhw=-sf",
"6BHMA0IRix]/=(jht",
"yS$=@Jdpp?P2k6SMQ",
"t1~|kkh+>4d>}OQ`a",
"2Y-\\CU\"944yBluWD5",
"'M\\ZbIX5{`Xd;qi!o",
"?N+RtVqj_r(C5@#0\"",
"2;*Livh?V$X/8z@Md",
")IN|7FOs2l-mAM[d@",
"(~f268J},xXrK'Rp'",
"&r/qf9fFHnzV!RzH/",
"}naDRH4p$NI2a).t,",
"{8DM+7!.Mge|~fnO|",
")r[@nI0YDH>6cE38p",
"(0Pwkk&IPchJHs.7A",
")r[@nI0YDH>6cE38p",
"8M-=cQFQ,pPo7eu=p",
"0PHw=/|(tZ1}FHm/'",
"[su`'0Oybc.\"-/W5)",
"1uHl[IC7Sr#NUJV;I",
"8z8%,jK0CDOkJz8I?",
"3Ao2yXDN%YzpE&Suy",
"zNs`7E'e/$i8VqaUL",
"bzHmA^K2>7`UZ?!AO",
};
std::string Alphabet[53] =
{
" ","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","r","w","x","y","z",
"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
};
std::string replace(std::string rep) {
int len = sizeof(Subs)/sizeof(Subs[0]);
std::stringstream ss1;
for(int i = 0; i < len; i++) {
if (rep.find(Subs[i]) != std::string::npos) {
ss1 << Alphabet[i];
}
}
std::string input = ss1.str();
return input;
}
std::string algorithm(std::string input)
{
//some other algorithms come here(not relative to this question)
input = replace(input);
return input;
}
int main(void){
int ed;
std::cin >> ed;
if(ed == 1){
//different function(not relative to the question)
}
else if(ed == 0){
std::string input;
std::cin >> input;
input = algorithm(input);
std::cout << input << std::endl;
}
else{
std::cout << "1 or 0" << std::endl;
main();
}
return 0;
}
示例输入:9bC5f0q@qA(RKZ>|r|+E6t,AZ~XewXP17T!&,Y*nz8C*,J}{+d]!&,Y*nz8C*,J}{+d]0B4>=nioEjp>4rhgi
预期输出:hello
实际输出:|+E6t,AZ~XewXP17T9bC5f0q@qA(RKZ>|r9bC5f0q@qA(RKZ>|r!&,Y*nz8C*,J}{+d]0B4>=nioEjp>4rhgi
抱歉,变长了。
解决方案
您没有使用Alphabet
. 我猜你想要ss1 << Alphabet[i];
。
推荐阅读
- javascript - 提交按钮重新加载页面
- tcp - 在 Postman Beta 功能的 WebSocket 请求中传递端口
- gcc - 英特尔 MPI 2019 始终使用 gcc 版本 4.9.3
- vsto - 如何在 Office vsto 插件开发中使用不同的配置文件进行开发和生产
- swift - 我搜索并搜索了 SwiftUI Switch Case Menu Cycle?
- amazon-web-services - Github Action ->“错误:禁止:无效凭证或此 AWS S3 存储桶名称可能已被使用”
- amazon-web-services - 编辑部署为容器映像的 AWS lambda 函数代码
- mysql - 根据表 2 上的条件在表 1 中插入 - MySQL
- sql - 在数据库中查找每个季度上个月的第一天?
- python-3.x - python pandas中数据框的屏蔽字符串和电话号码