我有这段代码,给我错误terminating with uncaught exception of type std::out_of_range: stoi: out of range
我确定是由long ascii = std::stoi(temp_string);行引起的

我使用stoi的方式如何导致该问题,我该如何解决?

std::string encode(std::string message){
std::string num_value;
long cipher;
if(message.length() < 20){
  for(int i = 0; i < message.length(); ++i){
    int temp = (char) message.at(i);
    num_value += std::to_string(temp);
  }
  return num_value;
}
else{
    int count = 0;
    std::string temp_string;
    for(int i = 0; i < message.length(); ++i){
      int temp = (int)  message.at(i);
      temp_string += std::to_string(temp);
      count++;
       if(count == 20){
         count = 0;
         //add cipher encrypt
         long ascii = std::stoi(temp_string);
         //cipher = pow(ascii, 10000);
         //add n to cipther encrypt
         //add cipherencrypt + n to num_value
         //reset temp_string
         temp_string += "n";

         temp_string = "";

      }
 }
return num_value;
}

int main(){
  std::string s = "Hello World my t's your name aaaaaaaaaaaaa?";
  std::cout<<"encoded value : "<< encode(s)<<std::endl;
}

最佳答案

std::stoi返回一个整数;听起来您的数字太大,不能整数。尝试改用std::stol(请参阅here)。

同样,如果您打算使代码具有可移植性(可与不同的编译器/平台一起使用),请记住整数和长整数没有标准大小。除非standard给出的最小大小足够,否则您可能要使用cstdint header 中给出的intX_t(其中X是您想要的大小)。

关于c++ - stoi导致超出范围的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29931827/

10-13 06:29