如何在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ó
相关产品推荐
相关产品推荐

