修剪一个char数组

时间:2012-06-19 22:35:56

标签: c# arrays

背景:我被邀请到一家知名公司接受采访,之前我被问到以下问题,然后被告知我没有采访该职位(C#,mvc3,razor)。 我真的对如何解决这个问题感兴趣。

问题:"Write a method that takes a char array, trims whitespace, and returns the same array."经过一番思考后,我被告知用“\ o”替换空格。

我开始时:

public static char[] Trim(char[] c)
    {
        for (int i = 0; i < c.Length; i++)
        {
            if (c[i] == '\r' || c[i] == '\n' || c[i] == '\t')
            {
                c[i] = '\o';
            }     
        }
    }

我被告知必须使用相同的数组,不能将其放入列表并调用ToArray()。但是我想如果阵列保持相同的大小,就不可能“修剪它”。

5 个答案:

答案 0 :(得分:5)

他们可能意味着\ 0(NUL字符),而不是dash-0

答案 1 :(得分:2)

假设他们打算用空字符替换空白字符,那么解决方案很简单:

步骤1:从字符串的开头(表示为字符数组)替换空格字符,直到遇到非WS字符。

步骤2:从字符串的末尾开始向后工作,执行相同操作。

public static void Trim(Char[] str) {

    int maxI = 0; // an optimisaiton so it doesn't iterate through chars already encountered
    for(int i=0;i<str.Length;i++) {
        if( Char.IsWhitespace( str[i] ) ) str[i] = '\0';
        else { maxI = i; break };
    }

    for(int i=str.Length-1;i>maxI;i--) {
        if( Char.IsWhitespace( str[i] ) ) str[i] = '\0';
    }
}

答案 2 :(得分:1)

public static char[] Trim(char[] str)
{
  return str.Where(x => !Char.IsWhiteSpace(x)).ToArray();
}

答案 3 :(得分:0)

这是丑陋且未经测试的,但它在一次传递中完成整个过程而不创建新数组:

public static void Trim(Char[] str) {

    int nonNullIndex = 0;
    int lastNonNullIndex = 0;

    for(int i=0;i<str.Length;i++) {
        str[nonNullIndex] = str[i];
        if( !Char.IsWhitespace( str[i] ) || nonNullIndex > 0) nonNullIndex++;
        if( !Char.IsWhitespace( str[i] )) lastNonNullIndex = i;
    }
    nonNullIndex++
    str[lastNonNullIndex] = '\0';

}

答案 4 :(得分:0)

我猜你可能要问的是从字符串之间删除空格,然后使用'\ 0'

填充数组剩余元素的char数组

e.g。 “将此字符串转换为”转换为“Convertthisstring”,并使用2'\ 0'

填充剩余的数组

解决方案:

    char[] TrimWhiteSpace(char[] source)
    {
        int i, j = 0;

        for (i = 0; i < source.Length; i++)
        {
            if (!char.IsWhiteSpace(source[i]))
            {
                source[j] = source[i];
                j++;
            }
        }

        for (int x = 0; x < (i - j); x++)
        {
            source[j + x] = '\0';
        }

        return source;
    }