C# int变量=句子。长度为';只有句子才行,长度才行
该代码的目标是删除有2个以上空格的位置,并将其替换为单个空格C# int变量=句子。长度为';只有句子才行,长度才行,c#,string,C#,String,该代码的目标是删除有2个以上空格的位置,并将其替换为单个空格 static void Main(string[] args) { string sentence = Console.ReadLine(); int size = Convert.ToInt16(sentence.Length); for (int i = 0; i < size - 1; i++) { sentence = se
static void Main(string[] args)
{
string sentence = Console.ReadLine();
int size = Convert.ToInt16(sentence.Length);
for (int i = 0; i < size - 1; i++)
{
sentence = sentence.Trim();
while ((sentence[i] == ' ' ) && (sentence[i+1] == ' '))
{
sentence = sentence.Remove(i + 1, 1);
}
}
Console.WriteLine(sentence);
Console.ReadLine();
}
static void Main(字符串[]args)
{
string语句=Console.ReadLine();
int size=Convert.ToInt16(句子长度);
对于(int i=0;i
由于某些原因,如果抛出2个或更多空格,此代码将无法工作。
但如果你使用句子长度,而不是上面的大小变量,这个就行了
static void Main(string[] args)
{
string sentence = Convert.ToString(Console.ReadLine());
for (int i = 0; i < sentence.Length - 1; i++)
{
while ((sentence[i] == ' ') && (sentence[i + 1] == ' '))
{
sentence = sentence.Remove(i + 1, 1);
}
}
Console.WriteLine("Sentence:{0}", sentence);
Console.ReadLine();
}
static void Main(字符串[]args)
{
string语句=Convert.ToString(Console.ReadLine());
for(int i=0;i<句子长度-1;i++)
{
while((句子[i]='')和&(句子[i+1]='')
{
句子=句子。删除(i+1,1);
}
}
Console.WriteLine(“句子:{0}”,句子);
Console.ReadLine();
}
为什么第一个代码段不起作用?它中断的原因是第一个代码块中的这一行:
句子=句子.Trim()代码>
在添加空格的情况下,您正在更改字符串的长度,但循环仍将在前面设置大小变量。假设您键入:“test”
则大小为6
,但修剪将使实际大小4
,即:test
。因此,当您尝试访问时抛出一个越界异常:语句[5]
希望这是有道理的
编辑:int size=Convert.ToInt16(句子长度)代码>设置大小时,您得到的是句子字符串的实际大小
由于i+1
,它将导致(句子[i]='')和&(句子[i+1]='')
超出我们的界限,因为这将导致它进入大小+1
在第二个代码块中,您可以这样做:句子.Length-1
因此i+1
最大值=句子.Length,因为如果从字符串中删除字符,句子.Length-1
将相应地增大或减小字符串的大小。而size-1
在循环之前是固定的,它会给你索引超出数组的界限。
所以在第一种情况下你会得到错误。但在第二种情况下,程序运行成功
干运行是一种技术,在这种技术中,您可以看到当程序接收到一些输入,然后像调试器一样跳过循环中的每一步时会发生什么 考虑第一个片段:
首先要注意的是句子。Length
将为您提供一个整数值,因此无需使用convert.ToInt16()
将其再次转换为整数。您可以使用int size=句子。Length
让输入为“这是示例”
,字符串长度为16
,并附加两个空格。通过删除第一个额外的空格,inputString的长度变为15
,这意味着循环的最后一次迭代将抛出异常,当删除第二个空格时,将在最后第二次迭代中获得IndexOutOfRangeException
。所以这不是一个很好的方法
因此,最好保留需要删除的字符的索引,并编写第二个循环将其从输入字符串中删除 使用调试器并逐步完成代码。无需调用Convert
,顺便说一句,谢谢您的回答!但即使在删除句子后。Trim(),代码仍然不起作用=(ConsoleApplication6.exe中发生类型为“System.IndexOutOfRangeException”的未处理异常。由于句子=句子。删除(i+1,1),因此更新了我的应答
也会更改字符串的长度。请在调试器中逐步检查代码。谢谢你们,我不会再犯同样的错误,并确保我的同学也理解。再次感谢!=)非常感谢您的解释!!=)@清晰:我很高兴你喜欢它,并且理解了它。我一定会尝试这种方法,真不敢相信我不记得了。非常感谢你!他的转变也有一个缺陷。他将32位整数转换为16位整数,然后再转换回32位整数,这意味着可能会丢失一半的位。