gpt4 book ai didi

C++ std::stoi 异常:无效参数

转载 作者:行者123 更新时间:2023-11-30 01:36:53 26 4
gpt4 key购买 nike

我正在编写一个程序,从两个颜色十六进制代码计算平均颜色十六进制代码。例如:我们向控制台输入了两个十六进制代码 #15293E 和 #012549。

然后它计算平均十六进制代码 - #0B2743

所以,我的主要问题是当我使用函数 std::stoi 从字符串转换为 int 时它给了我一个无效参数的异常(exception)。这是我到目前为止编写的代码

#include "stdafx.h"
#include <stdexcept>
#include <iostream>
#include <string>

#define CONSOLE_LOG(x) std::cout << x
#define HEX_LEN 6
#define RGB_LEN 2

void enterHexCodes(std::string& hC1, std::string& hC2)
{
bool isCorrectLen = false;
do {
std::cin >> hC1 >> hC2;
if (hC1.length() != HEX_LEN + 1 || hC2.length() != HEX_LEN + 1)
{
CONSOLE_LOG("ERROR!: Hex code should be no more than 7 symbols" << std::endl);
} else { isCorrectLen = true; }
} while (!isCorrectLen);
}

void getAvgHex(std::string& s, std::string& s1)
{
int r, g, b,
r1, g1, b1;

std::string R = s.substr(1, RGB_LEN);
std::string G = s.substr(3, RGB_LEN);
std::string B = s.substr(5, RGB_LEN);

std::string R1 = s1.substr(1, RGB_LEN);
std::string G1 = s1.substr(3, RGB_LEN);
std::string B1 = s1.substr(5, RGB_LEN);

try {
r = std::stoi(R), g = std::stoi(G), b = std::stoi(B);
//std::stoi(R1), std::stoi(G1), std::stoi(B1);
}
catch (std::invalid_argument& e) {
std::cout << "Invalid argument" << std::endl;
}
catch (std::out_of_range& e) {
std::cout << "Out of range" << std::endl;
}
catch (...) {
std::cout << "Something else" << std::endl;
}

std::cout << r << " " << g << " " << b;

}

int main()
{
std::string hexCode1, hexCode2;

enterHexCodes(hexCode1, hexCode2);

getAvgHex(hexCode1, hexCode2);

std::cin.get(); std::cin.get(); std::cin.get();
return 0;
}

我该如何修复这个异常,或者有没有其他方法可以将字符串转换为 int?

最佳答案

尝试添加转换的基础十六进制示例:std::stoi (str_hex,nullptr,16);

关于C++ std::stoi 异常:无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51000054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com