在char数组

时间:2015-07-02 14:53:44

标签: c# string

我正在尝试进行字符串操作。这是我的C#代码:

 static void Main(string[] args)
 {
    string input;
    string output;
    int length;

    Console.WriteLine("input = ");
    input = Console.ReadLine();
    length = input.Length;

    if ((input != "") || (length != 0))
    {
        Random randem = new Random();
        int i = -1; //because I do not want the first number to be replaced by the random number 
        char[] characters = input.ToCharArray();
        while (i < length)
        {
            int num = randem.Next(0, 9);
            char num1 = Convert.ToChar(num);
            i = i + 2; //so that every next character will be replaced by random number.. :D
            characters[i] = num1; //*error* here
        }
        output = new string(characters);
        Console.WriteLine(output);
     }

例如:

用户输入:"i_love_to_eat_fish"

所需的输出:"i2l4v1_9o5e8t7f8s2"

注意到中唯一未改变的字符 char []字符是:“i l v _ o e t f s”。 (程序的期望输出)

我已经尝试过使用此代码了,但是, 在 characters[i] = num1 时不断收到错误;

我是否在正确的轨道上?

5 个答案:

答案 0 :(得分:2)

每当您到达i = 17时,您都会向i添加2。这使得i = 19的输入长度等于18,导致超出范围异常。

答案 1 :(得分:2)

我猜你得到的错误是IndexOutOfRangeException这是因为i = i + 2;while确保i小于length,但之后添加2可能会导致更多。只需添加一个不在length之外的支票。

i = i + 2; 
if(i < length)
    characters[i] = num1;

或者只需更改为for循环。

Random randem = new Random();
char[] characters = input.ToCharArray();
for(int i = 1; i < length; i += 2)
{
    int num = randem.Next(1, 10); // max value is exclusive
    char num1 = num.ToString()[0];
    characters[i] = num1;
}
output = new string(characters);
Console.WriteLine(output);

同样,当Shar1er80指出您当前正在将数字转换为具有相同ASCII值的char,而不是表示该数字的实际字符。数字0-9由值48-57表示。您可以将对Random.Next的呼叫更改为:

int num = randem.Next(48, 58); // The upper bound is exclusive, not inclusive
char num1 = (char)num;

或者正如Shar1er80那样做

int num = randem.Next(0,10) // Assumming you want digits 0-9
char num1 = num.ToString[0];

另请注意Random.Next的最大值是独占的,因此如果您想要包含使用9的可能性,则必须使用比您想要的最大值大1的上限。

答案 2 :(得分:1)

因为你从索引-1开始,而且字符不包含-1的索引。

编辑:抱歉,没有正确答案,必须是while(i < length - 2)

答案 3 :(得分:1)

您获得的错误是IndexOutOfTheRangeException,它解释了本身的问题。

这意味着你在循环中为数组提供的索引超出了它的length-1(因为数组有基于0的索引)

因此,当您执行i+2时,您需要检查i+2在任何时间点是否都不超过i.length-1;这在你的循环中。

通常只检查您是否在0 and Array.Length-1

之间提供索引

答案 4 :(得分:1)

更改此行

char num1 = Convert.ToChar(num);

char num1 = num.ToString()[0];

然后......把

characters[i] = num1;

在if块中

if (i < length)
    characters[i] = num1;