gpt4 book ai didi

c++ - 字符串未被循环修改

转载 作者:搜寻专家 更新时间:2023-10-31 01:33:50 25 4
gpt4 key购买 nike

我正在解决以下问题:

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

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

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

Test-case input: pattern(2)

Expected:

1

22

Actual: "OUTPUT"

//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 + 48,或者i + '0'(其中'0'0的索引,也就是48 ).最后,您可以在构造函数中完成所有操作:

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

关于c++ - 字符串未被循环修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40632846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com