改变字符串的循环总是失败
Loop changing a string keep failing?
cin >> n;
string disks;
for(i=0; i < n; i++){
disks[2*i] = 1;
disks[2*i+1] = 0;
}
这一直在说:string subscript out of range
。即使我把它改成(n-1)
。我正试图想出一个非常简单的方法来把这个设置为交替的1
和0
s,我找不到它!
为什么这个循环导致错误?
当std::string是默认构造时,它是空的;由于底层存储尚未分配,您不能直接开始写入。
相反,使用string disks(n * 2, '0');
初始化字符串,并为2 * n
字符预留空间。它将预先填充'0'
(0),然后你所要做的就是遍历并填充1。
cin >> n;
string disks(n * 2, '0');
for (int i = 0; i < n; i++)
disks[2 * i] = '1';
还要注意,您需要使用'0'
和'1'
来获得实际的字符值。
当您定义一个没有初始值的字符串时,您不能访问它,在您的operator[]
示例中。所以,这几行:
disks[2*i] = 1;
disks[2*i+1] = 0;
将导致错误,因为您正在尝试访问一个不存在的索引。
如果你想给一个字符串赋值,使用连接:
disks += "0" + "1";
或push_back()
, append()
。赋值的顺序将决定哪个是偶数索引,哪个是奇数索引。
相关文章:
- C/C++:socket() 创建在循环中失败,打开的文件太多
- 谁能弄清楚为什么我的循环会失败?
- 断言失败:列出迭代器不可递增(不在循环中)
- 对于循环执行失败,因为变量我不会递增,为什么?
- GCC自动矢量化在减少循环中失败
- 密码检查程序-匹配密码失败-循环失败
- c++ 中带有容器迭代器的循环类型依赖关系(GCC 失败,而 MSVC 正常)
- 线程未正确结束:它忽略失败的循环条件
- 在循环中第二次调用luaT_pushudata时失败
- 在for循环内部使用setw是失败的
- 用于循环计数器失败的 C++
- 输入验证循环在第一次输入失败后无法正常工作
- std::vector push_back 在并行 for 循环中使用时失败
- 循环迭代后共享指针断言失败
- 对于循环不递增或循环不失败测试
- fgetwc EOF 循环测试失败,但 65535 正常
- 在字符串上循环以查看字符串失败的位置
- 当循环失败时,当读取int和字符串C++时
- 迭代器结束检查在“for”循环内递增后失败
- 编译不完整类型失败;循环依赖