改变字符串的循环总是失败

Loop changing a string keep failing?

本文关键字:失败 循环 字符串 改变      更新时间:2023-10-16
  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)。我正试图想出一个非常简单的方法来把这个设置为交替的10 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()。赋值的顺序将决定哪个是偶数索引,哪个是奇数索引。