我正在制作一个将words
转换为sdrow
的程序。
我知道要使它工作,需要以这种方式编写。 我更感兴趣的是为什么它必须是这样的。
这是我的代码:
Console.WriteLine("Enter a word : ");
string word = Console.ReadLine();
string rev = "";
int length;
for (length = word.Length - 1; length >= 0; length--)
{
rev = rev + word[length];
}
Console.WriteLine("The reversed word is : {0}", rev);
我的问题是:
a)为什么必须使用引号初始化字符串
b)为什么必须以小于字符串总长度的一个开始循环
c) arrayname [int]如何运作
我对C#和这个网站也很陌生。我希望我的问题有道理,并且我已经以正确和正确的方式问他们。
感谢您的时间!
答案 0 :(得分:4)
这就是我解释你的问题的方式。
- 您想知道为什么必须使用引号初始化字符串
- 为什么必须以 less 开始循环,而不是字符串的总长度
- 醇>
arrayname[int]
如何运作
我认为向您解释此问题的最佳方式是查看您的代码,并解释它的作用。
Console.WriteLine("Enter a word : ");
第一行代码将Enter a word :
打印到控制台中。
string word = Console.ReadLine();
这一行"读取"来自控制台的输入,并将其放入名为word
的字符串中。
string rev = "";
这会启动一个名为rev
的字符串,将其值设置为""
或空字符串。启动字符串的另一种方法是:
string rev;
这将启动一个名为rev
的字符串,其值为null
。这不适用于您的计划,因为rev = rev + word[length];
将rev
设置为自身+ word[length]
。如果它为null,则抛出错误。
代码的下一行是:
int length;
将一个int(在现实生活中我们称之为整数,基本上是一个数字)设置为null
的值。这没关系,因为它稍后会被设置而不会引用它自己。
下一行是for
循环:
for (length = word.Length - 1; length >= 0; length--)
此循环将名为length
的内部变量设置为当前值word.Length -1
。第二项说明运行循环的时间。当length
的值大于或等于0时,循环将继续运行。第三项通常设置变量的增加或减少的速率。在这种情况下,每次循环运行时length--
减少length
。
下一个相关的代码行是他的:
rev = rev + word[length];
正如我之前所说的那样,rev
本身+
将索引word
的字符串length
设置为rev
,无论当时的数字是多少。
在第一次运行for循环时,word
设置为自身(空字符串),加上长度为-1的come
。如果输入的单词是{{1 (例如),索引0为c
,索引1为o
,2为m
,3 = e
。
单词长度为4,因此减1为3(yay - 返回幼儿园),这是单词中的最后一个字母。
第二次循环,length
将为2,因此rev
本身(e)加上索引2,即m
。这将重复,直到长度达到-1,此时循环不会运行,然后继续下一行代码。
......这是:
Console.WriteLine("反向词是:{0}",rev);
这会在控制台上打印一行,说The reversed word is : <insert value of rev here>
{0}
是逗号后面的东西设置的内部变量,在本例中为rev
。
如果插入来,程序的最终输出将如下所示:
>Enter a word :
>come
>
>The reversed word is : emoc
答案 1 :(得分:2)
a)您必须初始化或实例化变量才能使用它。在你的情况下最好使用和StringBuilder,字符串是不可变对象,所以每个assignement意味着重新创建一个新的字符串。
b)C#中的数组基于零索引,因此它们的索引从零到长度为-1。
c)字符串是字符数组。
任何情况下你都必须尝试使用StringBuilder,它很容易使用
我希望这会有所帮助
答案 2 :(得分:1)
a)如果要在作业中使用它,则需要初始化变量rev = rev + word[length];
b)您正在使用for循环,这意味着您定义了起始号length = word.Length - 1
,停止条件length >= 0
和变量length--
所以lenght
基本上从5下降到0(产生6个循环)。原因是像'string'这样的数组char[]
被zerobased索引..意味着第一个元素是0,最后是array.Length - 1
c)所以一个字符串基本上是一个char的链......使用[] -Operator你可以访问一个索引。单词的返回类型[index]在这种情况下是一个字符。
我希望它有所帮助
答案 3 :(得分:1)
a)您需要首先实例化字符串rev,然后才能在循环中为其赋值。你也可以说&#34; string rev = String.Empty&#34;。你试图在转换中添加单词,如果你不先告诉它转义是一个空字符串,它就不知道它是什么添加单词。
b)字符串的字符具有索引,以显示它们在字符串中出现的位置。这些索引从0开始。因此,您的第一个字符的索引为0.如果字符串的长度为6,那么最后一个字符的索引将为5.所以length - 1将为您提供最后一个字符索引的值为5.一个c#for循环使用以下参数
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
其中&#34; int i = 0;&#34;是起始指数; &#34; i&lt; 10&#34;告诉循环什么时候停止循环;和&#34; i ++&#34;告诉它在每个循环后递增i(索引)。 所以在你的代码中你要说的是从我的字符串的最后一个字符开始;在字符串中仍有字符时执行此循环;并在每个循环后减少字符串的索引,以便下一个循环将查看字符串中的前一个字符。
c)单词[length]然后在这个场景中说是添加具有索引位置的字符&#34; length&#34;到rev字符串。这基本上会颠倒这个词。
答案 4 :(得分:0)
像往常一样,你可以在linq中做到并避免(显式)循环
using System;
using System.Linq;
namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Enter a word : ");
string word = Console.ReadLine();
Console.WriteLine("The reversed word is : {0}", new string (word.Reverse().ToArray()));
Console.ReadLine();
}
}
}
答案 5 :(得分:-1)
var reversedWords = string.Join(" ",
str.Split(' ')
.Select(x => new String(x.Reverse().ToArray())));
看看这里: