我正在解决以下问题:
赋值是创建并返回一个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)以上情况)?
我的代码如何在盛大的计划中占有一席之地?我打破了任何最佳做法吗?
答案 0 :(得分:2)
您正在使用的std::string::insert()
重载有三个参数:
您正在使用i
作为计数和字符。但是,该函数希望该字符为char
类型。在您的情况下,您的i
被解释为代码为1
和2
的字符,它们基本上是空格(嗯,不是真的,但无论如何)。因此,您的输出看起来像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');