字符串引用,长度总计数和arrayname [int]如何工作?

时间:2015-04-17 15:00:20

标签: c# arrays string for-loop

我正在制作一个将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#和这个网站也很陌生。我希望我的问题有道理,并且我已经以正确和正确的方式问他们。

感谢您的时间!

6 个答案:

答案 0 :(得分:4)

这就是我解释你的问题的方式。

  
      
  1. 您想知道为什么必须使用引号初始化字符串
  2.   
  3. 为什么必须以 less 开始循环,而不是字符串的总长度
  4.   
  5. arrayname[int]如何运作
  6.   

我认为向您解释此问题的最佳方式是查看您的代码,并解释它的作用。

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())));

看看这里:

Easy way to reverse each word in a sentence