You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中统计字符串中左右均为X的已占用座位数量?

问题描述

给定字符串xxoxoxoxoxoxooxxxxox,其中x代表已占用座位,o代表未占用座位。需要找出左右两侧均为已占用座位的单独未占用座位(注:从你的代码逻辑推测可能需求描述存在笔误,若实际需求是寻找被已占用座位包围的已占用座位,可调整判断条件)的数量。尝试编写的代码运行时出现错误,代码如下:

for (int i = 0; i < string.Length; i++) { 
    if(string[i]=='x' && string[i + 1]=='o' && string[i + 2] == 'x') 
      { 
        count++; 
      } 
}
错误原因

你的代码会触发索引越界异常,因为循环条件i < string.Length允许i取到字符串的最后一个索引(string.Length - 1),此时i+1和i+2会超出字符串的有效索引范围(字符串索引从0开始,最大索引为string.Length - 1)。

正确实现方法

情况1:寻找左右均为已占用座位的未占用座位(对应你原代码的逻辑意图)

调整循环范围,确保访问的索引都在有效区间内,同时修正判断条件的逻辑顺序:

int count = 0;
string seats = "xxoxoxoxoxoxooxxxxox";
// i从1开始,到seats.Length-2结束,保证i-1和i+1都为有效索引
for (int i = 1; i < seats.Length - 1; i++)
{
    // 判断当前座位是未占用,且左右两侧都是已占用
    if (seats[i] == 'o' && seats[i-1] == 'x' && seats[i+1] == 'x')
    {
        count++;
    }
}
Console.WriteLine(count); // 输出结果:5

情况2:寻找左右均为已占用座位的单独已占用座位(对应你原需求描述)

如果确实需要统计被已占用座位包围的已占用座位,只需修改判断条件:

int count = 0;
string seats = "xxoxoxoxoxoxooxxxxox";
for (int i = 1; i < seats.Length - 1; i++)
{
    // 判断当前座位是已占用,且左右两侧都是已占用
    if (seats[i] == 'x' && seats[i-1] == 'x' && seats[i+1] == 'x')
    {
        count++;
    }
}
Console.WriteLine(count); // 输出结果:2

内容的提问来源于stack exchange,提问作者Botond Szabó

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:30:46