字符串未被循环修改

时间:2016-11-16 13:01:46

标签: c++

我正在解决以下问题:

赋值是创建并返回一个string对象,该对象由int中通过函数参数发送的数字组成;所以函数调用string pattern(int n)的预期输出为"1\n22\n..n\n"

如果您感兴趣,请输入完整作业的URL(您需要登录才能查看),CodeWars Kata

这是其中一项测试(包括我的回复):

  

测试用例输入:pattern(2)

     

预期:

     

1

     

22

     

实际:“输出”

//string header file and namespace are already included for you
string pattern(int n){
    string out = "OUTPUT";
    for (int i = 1; i <= n; ++i){
      string temp = ""; 
      temp.insert(0, i, i);
      out += temp;
    }
    return out;
}

代码不言自明,我确信有多种方法可以让它更快更有效地运行。

我的问题是双重的。 为什么我的循环不开始即使我的表达式应该保持为真(1 <= 2)以上情况)?

我的代码如何在盛大的计划中占有一席之地?我打破了任何最佳做法吗?

3 个答案:

答案 0 :(得分:2)

您正在使用的std::string::insert()重载有三个参数:

  • 索引
  • 计数
  • 字符

您正在使用i作为计数和字符。但是,该函数希望该字符为char类型。在您的情况下,您的i被解释为代码为12的字符,它们基本上是空格(嗯,不是真的,但无论如何)。因此,您的输出看起来像OUTPUT___,其中___是三个空格。

如果查看ascii表,您会注意到数字0123...9的索引从48到57,因此要获得特定数字的索引,您可以i + 48或{{ 1}}(其中i + '0''0'的索引,即48)。最后,您可以在构造函数中完成所有操作:

0

答案 1 :(得分:1)

循环有效 - 但没有任何可见。插入字符代码1 - 而不是字符'1';使用方法:

temp.insert(0, i, '0'+i);

答案 2 :(得分:0)

插入方法未正确调用: temp.insert(0,i,i); ---&GT;

temp.insert(0,i,i +'0');