我已经无数次地尝试解决这个问题,互联网上的任何内容都没有帮助。我认为问题出在“getline(cin,strg);”但我不知道是什么,如果我只使用“cin>> strg;”,程序运行完美,但是,我想要考虑空间和诸如此类的东西。有什么问题?
#include <iostream>
#include <stdlib.h>
using namespace std;
string alphabet = "abcdefghijklmnopqrstuvwxyza";
string alphacap = "AbcdEfghIjklmnOpqrstUvwxyzA";
int loc;
string code(string str) {
for(int i = 0; i <= str.length()-1; i++){
if(alphabet.find(str[i]) != str.npos){
loc = alphabet.find(str[i]);
str = str.substr(0,i) + alphacap[loc+1] + str.substr(i+1,str.length());
}
}
return str;
}
string decode(string str) {
for(int i = 0; i <= str.length()-1; i++){
if(alphabet.find(str[i]) != str.npos){
loc = alphabet.find(str[i]);
str = str.substr(0,i) + alphacap[loc-1] + str.substr(i+1,str.length());
}
}
return str;
}
int main() {
string codc;
do{
system("cls");
cout << "Code or Decode? ";
cin >> codc;
}while(codc != "code" and codc != "Code" and codc != "decode" and codc != "Decode");
string str;
if(codc == "code" or codc == "Code"){
string strg;
getline(std::cin,strg);
cout << code(strg);
}else{
string strg;
getline(cin,strg);
cout << decode(strg);
}
}
答案 0 :(得分:0)
异常是由:
引起的str.substr(i + 1, str.length());
因为它尝试访问str
的元素,直至i + str.length()
。 i > 0
失败。查看原始Q&A。
str.substr(i + 1, str.length() - i - 1);
会纠正它。
如果你想获得索引i
右侧的字符串部分,你可以省略第二个参数:
str.substr(i + 1);
请参阅reference。
这也很危险:
alphacap[loc + 1]
alphacap[loc - 1]
如果loc
是alphacap
中第一个/最后一个元素的索引,该怎么办?
答案 1 :(得分:0)
getline(std::cin,strg)
strg ==&#34;&#34;
循环中:
for(int i = 0; i <= str.length()-1; i++)
如果str.length()== 0,则比较&lt; =无法正常工作
更改为后
for(int i = 0; i <= (int)str.length()-1; i++)
程序不会失败。cin >> codc;
至
getline(cin,codc);
现在节目不会失败。