【问题标题】:How to repeat the string in C++? [closed]如何在 C++ 中重复字符串? [关闭]
【发布时间】:2019-10-10 10:01:09
【问题描述】:

我必须编写一个程序,其中从用户输入整数值并且必须多次显示字符串。但是我遇到了错误。

#include<iostream>
#include<string>

using namespace std;

int main()
{
    int N;

    cout << "Enter N: ";
    cin  >> N;

    cout << string(N, "Well Done");

    return 0;
}

注意:我不能在这个作业中使用循环。

【问题讨论】:

  • 打印好 N 次
  • “它必须不使用任何类型的循环” - 现在这只是愚蠢/愚蠢。你想做fooN次,自然是写个循环。要求其他任何东西只是对解决方案施加任意和愚蠢的限制。
  • @user7377353 你也应该把这个限制放在问题本身。这是任何编程语言中最简单的事情,如果该语言的基本特性在你的作业中被禁止,我们应该知道。还有其他限制吗?
  • @user7377353 “它必须不使用任何类型的循环......除了循环我不知道”这是一个非常愚蠢和不切实际的要求。你在玩代码高尔夫吗?
  • @user7377353 如果您不能使用循环,并且您不知道什么是递归,那么您可以使用什么?实际作业是什么?你能edit你的问题提供吗?在没有明确说明的情况下,我投票结束这个问题“过于宽泛”。

标签: c++


【解决方案1】:

如果你不能使用循环,你可以使用goto 来绕过限制:

#include <iostream>
#include <string>
using namespace std;

int main()
{
  int N;

  cout << "Enter N: ";
  cin  >> N;

  {
    int i = 0;
    goto test;
    begin:
    cout << "Well Done";
    ++i;
    test:
    if (i < N)
      goto begin;
  }
  return 0;
}

请注意,goto 被广泛认为是不好的做法。

【讨论】:

  • Ayxan :您的解决方案在作业中被接受。谢谢!
  • Goto 是非常不推荐的方式
  • @BorisSokolov 无论如何,限制是非常不现实的。在实际代码中,您将使用循环,并且在给定的限制下,goto 老实说是实现目标的最干净的方法(考虑到代码的大小)
  • @Ayxan,是的。我们不知道实验室的目的:)
  • 现在别看,但这确实一个循环。
【解决方案2】:

EDIT2:在原始提问者的评论中,本作业禁止使用任何类型的循环。

使用递归。

void printN(int n, string s) {
    if (n <= 0) return;
    cout << s << endl;
    printN(n-1, s);
}

然后你可以从你的主程序中调用它,如下所示:

printN(userInput, "Hi my name is ricky bobby");

编辑:刚刚看到你还没有学习递归。查找这个术语,并熟悉它。这是一种无需循环即可进行迭代的方式(这是我能描述的最简单的方式)

【讨论】:

  • 当一个简单的循环就足够时,递归对于这个任务来说是多余的。
  • @RemyLebeau 请阅读原始提问者的评论,因为他们非常清楚地声明在他的学校项目中禁止循环。
  • @RemyLebeau 除了 OP 在 cmets 中说不允许循环。是的,去想...
【解决方案3】:

std::string 没有将字符串重复 N 次的构造函数(不过,它确实有一个用于将单个字符重复 N 次的构造函数)。你需要的是一个循环,例如:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int N;

    cout << "Enter N: ";
    cin  >> N;

    for (int i = 0; i < N; ++i)
        cout << "Well Done";

    return 0;
}

【讨论】:

  • 原始提问者说不允许循环。这并不能解决他们的问题。
  • 我在看到有关该限制的评论之前发布了此答案。根据 StackOverflow 的指南,我回答了被问到的实际问题。此类限制未包含在问题中。
  • 是的,这是没有限制的更正确的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多