一个统计空格、制表符、换行符的代码:
你那样写,每次循环读取了4个字符
而实际上,你一个字符需要4次判断,首先判断是否为结束,然后判断是否为空格,是否为制表、是否为换行。
你那么写,判断完之后,没有继续判断,而是又去读了下一个字符
写成这样每次循环都会少比较4个不同的字符,而不是每个字符比较四次,每次调用getchar都会获取当前的然后指针后移准备获取下一个
【以下回答由 GPT 生成】
原因是在C#中,Console.ReadKey().KeyChar
会读取一个字符,并返回该字符的ASCII值。 ASCII值和字符是不同的。在C#中,字符由两个字节表示,即16位。因此,对于空格、制表符和换行符等特殊字符,ASCII值与该字符本身不同。
在第二段代码中,将ch
声明为char
类型并使用Console.ReadKey().KeyChar
来获取输入的字符,这将导致与预期不符的结果。Console.ReadKey().KeyChar
返回的是ASCII值,而不是字符本身。因此,条件判断失效,导致无法正确统计空格、制表符和换行符的数量。
为了解决这个问题,可以使用Console.ReadKey().Key
和ConsoleKey
来表示输入的字符。下面是修改后的代码:
using System;
class Program {
static void Main(string[] args) {
Console.WriteLine("请输入一段文本:");
int spaceCount = 0, tabCount = 0, newlineCount = 0;
while (true) {
ConsoleKeyInfo keyInfo = Console.ReadKey();
char ch = keyInfo.KeyChar;
if (ch == ' ')
spaceCount++;
else if (ch == '\t')
tabCount++;
else if (ch == '\n')
newlineCount++;
if (keyInfo.Key == ConsoleKey.Enter)
break;
}
Console.WriteLine("统计结果:");
Console.WriteLine("空格数量:" + spaceCount);
Console.WriteLine("制表符数量:" + tabCount);
Console.WriteLine("换行符数量:" + newlineCount);
}
}
在这段修改后的代码中,我们使用ConsoleKeyInfo
来获取输入字符的信息,并通过keyInfo.KeyChar
获得字符的值。而要检查特殊字符,我们使用keyInfo.Key
和ConsoleKey.Enter
对比。这样就可以正确统计空格、制表符和换行符的数量。
【相关推荐】