字符串订阅超出C++用于胆汁

发布于 2025-01-18 18:14:29 字数 2313 浏览 4 评论 0原文

请帮忙调试。

在第五次输入后,它给我一个错误“字符串下标超出范围错误”。

输入图片这里的描述

我不知道要改变什么。


这是代码:

#include <iostream>
#include <string>
#define N 100

int str2int(std::string input)
{
    int num = 0;

    for (int i = 0; i < input.length(); i++)
    {
        if (input[i] == 'V')
            num *= 4 + 0;

        else if (input[i] == 'U')
            num *= 4 + 1;

        else if (input[i] == 'C')
            num *= 4 + 2;

        else if (input[i] == 'D')
            num *= 4 + 3;
    }
    return num;
}

int main(void)
{
    int tablet = 0, num1 = 0, num2 = 0, ans = 0;
    std::string cowNum1 = "", cowNum2 = "", result = "";
    std::string operation = "";

    std::cin >> tablet;
    std::cout << "COWCULATIONS OUTPUT" << std::endl;

    while (tablet--)
    {
        std::cin >> cowNum1 >> cowNum2;
        num1 = str2int(cowNum1);
        num2= str2int(cowNum2);
            
        for (int oprt = 0; oprt < 3; oprt++)
        {
            std::cin >> operation[oprt];

            switch (operation[oprt])
            {
            case 'A':
            {
                num2 += num1;
                break;
            }
            case 'R':
            {
                num2 >>= 2;
                break;
            }
            case 'L':
            {
                num2 <<= 2;
                break;
            }
            case 'N':
            default:
                break;
            }
        }
        std::cin >> result;
        ans = str2int(result);

        if (num2 == ans)
            std::cout << "YES" << std::endl;
        else
            std::cout << "NO" << std::endl;

        std::cout << "END OF OUTPUT" << std::endl;
    }
    return 0;
}

问题来自 377 - Cowculations

示例输入

5
VVVVU
VVVVU
A
A
A
VVVVVVUV
VVCCV
VVDCC
L
R
A
VVVVUCVC
VVCCV
VVDCC
R
L
A
VVVVUCVV
VVUUU
VVVVU
A
N
N
VVVVVUCU
DDDDD
VVVVU
A
L
L
UVVVVVVV

Please help with debugging.

It gives me an error 'string subscript out of range error' after the fifth input.

enter image description here

I was unable to figure out what to change.


Here is the code:

#include <iostream>
#include <string>
#define N 100

int str2int(std::string input)
{
    int num = 0;

    for (int i = 0; i < input.length(); i++)
    {
        if (input[i] == 'V')
            num *= 4 + 0;

        else if (input[i] == 'U')
            num *= 4 + 1;

        else if (input[i] == 'C')
            num *= 4 + 2;

        else if (input[i] == 'D')
            num *= 4 + 3;
    }
    return num;
}

int main(void)
{
    int tablet = 0, num1 = 0, num2 = 0, ans = 0;
    std::string cowNum1 = "", cowNum2 = "", result = "";
    std::string operation = "";

    std::cin >> tablet;
    std::cout << "COWCULATIONS OUTPUT" << std::endl;

    while (tablet--)
    {
        std::cin >> cowNum1 >> cowNum2;
        num1 = str2int(cowNum1);
        num2= str2int(cowNum2);
            
        for (int oprt = 0; oprt < 3; oprt++)
        {
            std::cin >> operation[oprt];

            switch (operation[oprt])
            {
            case 'A':
            {
                num2 += num1;
                break;
            }
            case 'R':
            {
                num2 >>= 2;
                break;
            }
            case 'L':
            {
                num2 <<= 2;
                break;
            }
            case 'N':
            default:
                break;
            }
        }
        std::cin >> result;
        ans = str2int(result);

        if (num2 == ans)
            std::cout << "YES" << std::endl;
        else
            std::cout << "NO" << std::endl;

        std::cout << "END OF OUTPUT" << std::endl;
    }
    return 0;
}

Question is from 377 - Cowculations

Sample Input

5
VVVVU
VVVVU
A
A
A
VVVVVVUV
VVCCV
VVDCC
L
R
A
VVVVUCVC
VVCCV
VVDCC
R
L
A
VVVVUCVV
VVUUU
VVVVU
A
N
N
VVVVVUCU
DDDDD
VVVVU
A
L
L
UVVVVVVV

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想你的星星会说话 2025-01-25 18:14:29

您不得将下标操作员用于空字符串来更改其值,

 std::cin >> operation[oprt];

至少您必须在循环中使用的魔术编号3声明对象操作。例如

std::string operation( 3, '\0' );

,或者

std::string operation;
operation.resize( 3 );

如果您只需要在循环中输入一个字符,则不需要类型std :: String的对象。你可以写

    for (int oprt = 0; oprt < 3; oprt++)
    {
        char c;
        std::cin >> c;

        switch ( c )
        {
        case 'A':
        {
            num2 += num1;
            break;
        }
        case 'R':
        {
            num2 >>= 2;
            break;
        }
        case 'L':
        {
            num2 <<= 2;
            break;
        }
        case 'N':
        default:
            break;
        }
    }

You may not use the subscript operator for an empty string to change its value

 std::cin >> operation[oprt];

At least you have to declare the object operation with the magic number 3 used in your for loop. For example

std::string operation( 3, '\0' );

Or

std::string operation;
operation.resize( 3 );

If you need to enter only one characters in a loop then an object of the type std::string is not required. You could just write

    for (int oprt = 0; oprt < 3; oprt++)
    {
        char c;
        std::cin >> c;

        switch ( c )
        {
        case 'A':
        {
            num2 += num1;
            break;
        }
        case 'R':
        {
            num2 >>= 2;
            break;
        }
        case 'L':
        {
            num2 <<= 2;
            break;
        }
        case 'N':
        default:
            break;
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文