首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的空字符串分配不能清除字符串

为什么我的空字符串分配不能清除字符串
EN

Stack Overflow用户
提问于 2021-11-17 15:30:48
回答 2查看 138关注 0票数 1

我有一个练习,看起来是这样的:

问题陈述是简单而直接的。你将得到一个长度为N的非负整数P,你需要检查它是否可以被q整除?

整数P将在它的十进制表示中给出,其中P0为最左边的数字,P1为左侧的第二位数字!

其余的数字可以从公式中生成:

2 <= I <= N-1的Pi =( 4*Pi-1 + Pi-2 )模q

输入第一行包含一个整数T-表示测试用例的数量.

T行后面每一行包含四个整数P0、P1、Q和N!

如果相应的整数可被q整除,则每个testcase输出的输出是肯定的,否则不可以。

约束T <= 100000 0< P0,P1,Q< 10 0

4.

1 4 2 2

1 4 2 1

4 2 3 2

3 4 7 3

输出:是的,不是,是的,没有解释值P是14,1,42,345在各自的情况下!

这就是我想出来的

代码语言:javascript
复制
    #include <iostream>
    #include <vector>
    #include <string>
    
    using namespace std;

    int main()
    {
        int t, q, n, p_0, p_1, p_temp, p;
        vector<int> digits;
        vector<string> answers;
        string number = "";
    
        cin >> t;
    
        for (int i = 0; i < t; i++)
        {
            cin >> p_0 >> p_1 >> q >> n;
            if (n == 1)
            {
                digits.push_back(p_0);
            }
            else
            {
                digits.push_back(p_0);
                digits.push_back(p_1);
                for (int i = 2; i <= (n - 1); i++)
                {
                    p_temp = (4 * digits[i - 1] + digits[i - 2]) % q;
                    digits.push_back(p_temp);
                }
            }
            for (int i = 0; i < digits.size(); i++)
            {
                number += to_string(digits[i]);
            }
            p = stoi(number);
            cout << number << endl;
            if (p % q == 0)
            {
                answers.push_back("YES");
            }
            else
            {
                answers.push_back("NO");
            }
            number = "";
        }
        for (int i = 0; i < answers.size(); i++)
        {
            cout << answers[i] << endl;
        }
    
    }

我所做的一切都很好,除了一件事,这个部分没有清除我的number变量。

代码语言:javascript
复制
    number = "";

老实说,我不知道为什么,能不能有人纠正我的错误,解释我做错了什么。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-11-17 15:42:12

你的问题是数字向量。

每一个循环--数字字符串--都会被数字向量重新填充,而这个数字向量永远不会被清除。

使用digits.clear()清空向量,如下所示:

代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <string>

using namespace std;



int main()
{
    int t, q, n, p_0, p_1, p_temp, p;
    vector<int> digits;
    vector<string> answers;
    string number = "";

    cin >> t;

    for (int i = 0; i < t; i++)
    {
        cin >> p_0 >> p_1 >> q >> n;

        

        if (n == 1)
        {
            digits.push_back(p_0);
        }
        else
        {
            digits.push_back(p_0);
            digits.push_back(p_1);
            for (int i = 2; i <= (n - 1); i++)
            {
                p_temp = (4 * digits[i - 1] + digits[i - 2]) % q;
                digits.push_back(p_temp);
            }
        }

        for (int i = 0; i < digits.size(); i++)
        {
            number += to_string(digits[i]);
        }

        p = stoi(number);
        cout << number << endl;

        if (p % q == 0)
        {
            answers.push_back("YES");
        }
        else
        {
            answers.push_back("NO");
        }

        digits.clear();
        number = "";
    }

    for (int i = 0; i < answers.size(); i++)
    {
        cout << answers[i] << endl;
    }

}
票数 2
EN

Stack Overflow用户

发布于 2021-11-17 15:34:56

要清除字符串,可以/应该将std::string::clear()用作:

代码语言:javascript
复制
number.clear();

您的程序中可能还有其他逻辑错误,这可能是无法获得预期输出的原因。

此外,与其使用string number = "";创建/初始化字符串string number = "";,不如使用

代码语言:javascript
复制
string number;//no need to write = ""
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70007229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档