【发布时间】:2021-01-05 03:33:18
【问题描述】:
我正在尝试创建一个简单的函数,将字符串中的字符加倍并输出新字符串。前任。 “hello world”会变成“hheelloo wwoorrlldd” 但是,使用我编写的函数,输出是空的。如果有人能告诉我为什么会这样,我将不胜感激。谢谢!
using namespace std;
string doubleChar(string str) {
string newString;
for(int i =0;i<str.size();++i){
newString[i] = str[i];
newString[i+1] = str[i];
}
return newString;
}
【问题讨论】:
-
newString[i+1] = str[i];写入字符串的边界并调用未定义的行为。一般operator[]不会在字符串中添加新字符,它只会替换现有的,所以你的逻辑不起作用 -
您必须确保为新字符分配了存储空间。
newString[i] = str[i]; newString[i+1] = str[i];可以访问存储之外的内容。请改用newString += str[i]; newString += str[i];(或事先确保newString的大小合适)。 -
newString.append(1, str[i]).append(1, str[i])可以替换你的 for 循环。 -
@WhozCraig 正如你提到的
std::string::append():为什么不newString.append(2, str[i]);? ;-) -
@Scheff Derp。那将是整个森林换树木的事情。这将教我在凌晨时评论 SO。你当然是对的。