【问题标题】:Returning a string from a function c++ [closed]从函数c ++返回字符串[关闭]
【发布时间】:2013-09-08 15:45:46
【问题描述】:

基本上,我想编写一个程序,使用函数在屏幕上显示星号。长度由输入参数指定。所以如果用户输入 2,它将如下所示:

**

**

string myfunct(int thelength)
{
    string s1;
    for (int i=1;i<=thelength;i++)
    {
        string s1 =+ " * ";
    }
    return s1;
}

【问题讨论】:

  • 是的,你没有问你的问题,但我猜你应该使用+=而不是=+
  • 就我个人而言,我不会使用任何这些,但 return std::string(thelength, '*'); 如果您坚持使用循环,请习惯从“索引”零开始并使用 ++i 而不是 i++(对于ints 使用什么并不重要,但对于迭代器来说,使用前增量通常比后增量更有效)。
  • 您可能还应该得到一个编译器,警告您的第二个 s1 隐藏了您的另一个 s1 变量。
  • 那么现在你想要什么? n*2 个星号,在不同的行上?

标签: c++ string function


【解决方案1】:

回答原始问题,该问题要求一个函数返回带有n 星号的字符串,其中n 由调用者输入。

std::string 有一个构造函数,它用给定字符的 N 个副本构造一个字符串:

std::string myfunct(int thelength)
{
  return std::string(theLength, '*');
}

这将返回一个由theLength星号*组成的字符串。

【讨论】:

  • 谁给了 -1 ? +1 补偿。
  • 例如,@Mahesh 我做过。提供的方案不符合要求:左右没有空格。
  • @IInspectable 没有这样的要求。
  • @juan 如果您阅读原始代码,您会得出相同的结论。
  • @IInspectable 的重点是提供执行 OP 表达的他们想要的代码,而不是复制代码中的错误。我检查了他们想要为输入 2 创建的字符串,它是两个没有任何空格的星号。
【解决方案2】:

现有的答案都做错了,你要:

std::string asterisks(int n) { return std::string(n, '*'); }

【讨论】:

  • 除了我的回答 :) 顺便说一句,这也被否决了。
  • “错误”不准确。次优,是的,但也教 OP 关于循环和范围。
  • @BenVoigt,没有错,但是做错了。如catonmat.net/blog/wp-content/uploads/2008/12/…
  • @JonathanWakely:不,他们没有做错。假设一组与你不同的约束,也许。
  • 幽默。你是doing it wrong
【解决方案3】:

在您的代码中,您在 for 循环中定义了一个局部变量 string s1,它掩盖了外部定义的变量。因此,在每次迭代中,您将一个星号添加到一个空的 s1 字符串中。此外,将 =+ 替换为 +=。如果想要的输出是:

对于大小 = 2

**

**

对于大小 = 3

***

***

那么你的代码可能是这样的:

#include<iostream>
using namespace std;

string myfunct(int thelength)
{
    string s1; 
    for (int i=1;i<=thelength;i++)
    {   
        s1 += " * ";
    }   
    return s1; 
}

int main()
{
    cout << "Enter no of stars: ";
    int size;
    cin >> size;        

    cout << myfunct(size) << endl; 
    cout << endl; 
    cout << myfunct(size) << endl; 
}

【讨论】:

  • 在这段代码中不会有换行符
  • dev++ 给了我一个被拒绝的权限对不起大家
  • @me.deeiip,对,问题变了
猜你喜欢
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 1970-01-01
  • 2014-11-06
相关资源
最近更新 更多