gpt4 book ai didi

c++ - 如何使用字符串的 char 值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:10 25 4
gpt4 key购买 nike

抱歉,如果这是一个愚蠢的问题,这是我的第一堂编码课。

If the checksum is 10, the last digit is denoted as X according to the ISBN-10 convention. Write a program that prompts the user to enter the first 9 digits and displays the 10-digit ISBN (including leading zeros). Your program should read the input as an integer.

示例运行应如下所示:

Enter the first nine digits of the ISBN: 013601267
The ISBN-10 number is: 0136012671

我已经成功地编写了一个可以执行此操作但对所有九个数字都使用 int 值的程序。不幸的是,这需要用户分别输入每个数字。

所以我现在要做的是使用 string ISBN这样我就可以针对各个部分,即。 isbn[0] * 1 + isbn[1] * 2...

我也试过static_cast<char>(ISBN[0]) * 1 + static_cast<char>....认为它会有所作为,但我得到了相同的结果。

string ISBN;
cout << "Enter the first nine digits of the ISBN as integer: ";
cin>>ISBN;

int n10 = (ISBN[0] * 1 + ISBN[1] * 2 + ISBN[2] * 3 + ISBN[3] * 4 + ISBN[4] * 5 + ISBN[5] * 6 + ISBN[6] * 7 + ISBN[7] * 8 + ISBN[8] * 9) % 11;
if (n10 == 10)
{
cout << ISBN << "X" << endl;
}
else
{
cout << ISBN << n10 << endl;
}

所以当我输入这个数字时 013601267我应该得到一个1 (0136012671)最后我得到了 5 (0136012675) .

我认为发生这种情况是因为它给我 ASCII dec 值而不是 char值(value)。

最佳答案

您应该检查的四件事:

1:字符串的大小实际上是9个字符。

if (ISBN.size() != 9) {
// Error
}

否则访问不存在的元素将导致程序出错。

2:数字不是从值 0 开始的。在 ASCII(或 UTF-8)中,数字从 48 开始。因此 48 => '0' 49 => '1' 等等。但是 C++ 保证所有数字都是连续的,所以只要你知道第一个数字,你就可以减去它并得到正确的值。如果您在整数表达式中使用 '0',它将转换为正确的值。因此,要从 char 生成数字值,您应该在乘法之前从每个数字中减去该值。

n10 = ((ISBN[0] - '0') * 1) + ((ISBN[1] - '0') * 2) + ...

3:但是你应该检查字符串是否全是数字。

for(auto x: ISBN) {
if (!std::is_digit(x)) {
// ERROR
}
}

4:要打印前导零的 9 个字符的字符串,您需要确保正确地准备流:

std::cout << std::setw(9) << std::setfill('0') << number;

或者如果数字已经是字符串形式,你知道它有 9 个字符长,你可以简单地使用:

std::cout << ISBN;

所以要在您的情况下输出正确的 10 个字符数:

std::cout << ISBN << ((n10 == 10) ? 'X' : ('0' + n10)) << "\n";

关于c++ - 如何使用字符串的 char 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55779932/

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