首页 > 解决方案 > 在 C++ 中的以下程序中重复调用函数

问题描述

我必须编写一个程序,该程序需要输入包含一些“$”和数字的字符串。程序的输出由所有可能的字符串组成,其中字符串中的 '$ 被所有其他数字替换。我为此编写了以下代码。

#include<bits/stdc++.h>

using namespace std;

int numberOf(string in)
{
    int count = 0;
    for(int i = 0; i <= in.size()-1; i++)
        if(in[i] == '$')
            count++;

    return count;
}
void solve(string in, string in1, vector <string> &s,
    int index)
{

    if(numberOf(in) == 0)
    {
        s.push_back(in);
        return;
    }

    if(index == in.size())
    {
        return;
    }

    if(in1.empty())
    {
        return;
    }
    
    else
    {
        if(in[index] == '$')
        {
            string in2 = in;
            in2[index] = in1[0];
            string in3 = in1;
            in3.erase(in3.begin());
            solve(in2, in1, s, index+1);
            solve(in, in3, s, index);

            return;
        }
        else
        {
            solve(in, in1, s, index+1);
            return;
        }
    }
}

void replaceDollar(string in)
{
    string in1 = in;
    int count = 0;
    for(int i = 0; i <= in.size()- 1; i++)
    {
        if(in[i] != '$')
        {
            in1.push_back(in[i]);
            count++;
        }
    }
    count = in.size() - count;
    cout << "Number is " << count << "\n";

    vector <string> s;
    solve(in, in1, s, 0);

    for(auto i = s.begin(); i != s.end(); i++)
        cout << *i << " ";
    cout << "\n";

}

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        string in;
        cin >> in;
        replaceDollar(in);
    }
return 0;
}

对于以下输入

1
$45

预期的输出应该是

445 545

但它返回

445 545 445 545

谁能解释为什么它输出重复的字符串?也有人可以提出更好的方法来解决这个问题吗?提前致谢!

标签: c++recursion

解决方案


假设这是家庭作业:

  1. 重来。你的代码对于这个问题来说太复杂了。
  2. 我会把一切都当作类型char
  3. 循环/迭代所述字符串,用每个数字std::string::replace()替换每个实例。 -- 如果你的老师不希望你使用库,那么添加另一个循环并自己比较。 3a。当然,添加一个检查,这样你就不会替换为$
    std
    $$
  4. 在每次迭代时创建字符串的新副本。
  5. stdout在创建它们时打印每个。

看到这个帖子:

如何替换字符串中所有出现的字符?

ps 专业提示:不要使用using namespace. 在你的调用中使用完整的命名空间;例如:

坏的

using namespace std;
string = "hello world";

好的

std::string = "hello world";

推荐阅读