循环未修改的字符串

String not modified by loop

本文关键字:字符串 未修改 循环      更新时间:2023-10-16

我正在解决以下问题:

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

如果您有兴趣,这里是完整作业的URL(您需要登录才能查看(,CodeWars Kata

这是测试之一(包括我的回报(:

测试用例输入:模式(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((?

我的代码在宏伟的计划中如何成立?我是否违反了任何最佳实践?

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

  • 指数
  • 计数
  • 字符

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

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

string temp(i, i + '0');

循环有效 - 但不做任何可见的操作。您插入字符代码 1 - 而不是字符"1";用:

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

方法不调用 right:temp.insert(0, i, i(;--->

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