我不知道为什么我会得到" 0"在温度指数13

时间:2016-04-12 13:15:18

标签: c# string

我尝试将 ini 字符串重新排列为temp,外部循环用于temp中的字符数,内部循环用于查找索引号PC2_table并将角色ini[j]追加到temp,一切正常,但我不知道为什么我在索引13处什么都没有。

string ini = "000100010000110011110100001001101001001110101101";
Console.WriteLine(ini.Length + " " +ini[0]);            
int[] PC2_table = { 13 ,   16 ,  10 ,   23 ,    0,    4,
                     2 ,   27 ,  14 ,    5 ,   20,    9,
                    22 ,   18 ,  11 ,    3 ,   25,    7,
                    15 ,    6 ,  26 ,   19 ,   12,    1,
                    40 ,   51 ,  30 ,   36 ,   46,   54,
                    29 ,   39 ,  50 ,   44 ,   32,   47,
                    43 ,   48 ,  38 ,   55 ,   33,   52,
                    45 ,   41 ,  49 ,   35 ,   28,   31};

ini = " " + ini;   // because PC2 table main indexing 1 sy hai
string temp = null;
for (int i = 0; i < 56; i++)
{
    for (int j = 0; j < PC2_table.Length; j++)
    {                    
     if(PC2_table[j] == i)
     {
         Console.WriteLine(i + " " +j + " " + ini[j] );
         temp += ini[j];
         break;
     }                 
    }
}
Console.WriteLine(temp);

3 个答案:

答案 0 :(得分:2)

i = 13,当j = 0时,会发生什么:

PC2_table[j] = PC2_table[0] = 13

i13,因此您输入if块:

if(PC2_table[j] == i){ //enters
}

可是:

ini[j] = ini[0] = " ";

space是否由于:

string ini = "000100010000110011110100001001101001001110101101";
...
ini = " " + ini; //note the addition of " " in front of original ini    

请注意,现在ini是:

" 000100010000110011110100001001101001001110101101" //the first element at index [0] is " "

你这样做:

temp += ini[j]; //"1000001100110" + " " = "1000001100110 " //additional space

因此,您在第13个索引中添加了空间:

答案 1 :(得分:1)

您正在执行声明

ini = " " + ini;

所以你ini的第一个字符是空的。 然后你有i = 13和j = 0的组合,程序试图访问ini的位置0,所以他将返回你的空白区域。 所以你应该修改索引。

无论如何,我对这项计划无论如何都没有了解。

答案 2 :(得分:1)

你在索引13得到0,因为PC2_table[0]是13,在这种情况下j等于0