C++ 使用字符连接时字符串连接不起作用
我尝试了以下几点: count and say序列是从以下开始的整数序列: 1,11,21,121111221。。。 1被读出为1或11。 11被读出为两个1或21 21被读出为一个2,然后是一个1或1211 给定整数n,生成第n个序列 实际上,我编写了一些代码来解决这个问题,但它没有生成正确的答案。代码中的问题是,我试图使用“+”运算符将字符添加到字符串中C++ 使用字符连接时字符串连接不起作用,c++,C++,我尝试了以下几点: count and say序列是从以下开始的整数序列: 1,11,21,121111221。。。 1被读出为1或11。 11被读出为两个1或21 21被读出为一个2,然后是一个1或1211 给定整数n,生成第n个序列 实际上,我编写了一些代码来解决这个问题,但它没有生成正确的答案。代码中的问题是,我试图使用“+”运算符将字符添加到字符串中 string Solution::countAndSay(int A) { string s = "11";
string Solution::countAndSay(int A)
{
string s = "11";
string str;
string ans[A + 2];
ans[1] = "1";
ans[2] = "11";
int count = 1;
for (int j = 3; j <= A; j++) {
str = "";
count = 1;
for (int i = 0; i < s.size() - 1; i++) {
if (s[i] == s[i + 1])
count++;
else {
str += to_string(count) + s[i];
count = 1;
}
}
if (s[s.size() - 1] != s[s.size() - 2]) {
str += "1" + s[s.size() - 1];
}
else
str += to_string(count) + s[s.size() - 1];
ans[j] = str;
s = str;
}
return ans[A];
}
我只是想知道早期代码中的错误。我们不能使用“+”运算符向字符串中添加字符吗
str += "1" + s[s.size() - 1];
并不意味着
但是
右手边的表情根本不是你想要的
“1”
不是字符,而是包含两个字符{1',0}
的字符串文字(它是C字符串,因此有空终止符)
“1”+…
不像您的顶级操作那样是一个追加,因为C字符串没有重载运算符,只是衰减为指针
s[s.size()-1]
将从字符提升为整数,并添加到字符串文本中第一个字符的地址
除非字符是0
或1
(我不是说'0'
或'1'
),否则结果将超出字符串文字的末尾,并且行为将未定义
str+=(…)
现在添加了一个C字符串,这是非法的(由于上面的UB)
str += to_string(count) + s[i];
工作原理是,to_string(count)+s[i]
的左侧是一个带重载的std::string
。你可以通过写作获得同样的效果
str += string{"1"} + s[s.size() - 1];
因此,在
操作符+
“1”+s[s.size()-1]的左侧也有一个std::string
而不是一个C字符串文本代码>不会向字符串中添加字符,因为“1”
不是字符串;)相反,它执行指针算术,因为“1”
是指针。请参见此处:这是否回答了您的问题?
str += ("1" + s[s.size() - 1]);
str += to_string(count) + s[i];
str += string{"1"} + s[s.size() - 1];