5

背景:我被邀请参加一家知名公司的面试,并在被告知我未能通过该职位的面试之前被问到以下问题(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(). 但是我认为如果数组保持相同的大小,就不可能“修剪它”。

4

5 回答 5

5

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

于 2012-06-19T22:38:49.940 回答
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';
    }
}
于 2012-06-19T22:42:34.757 回答
2
public static char[] Trim(char[] str)
{
  return str.Where(x => !Char.IsWhiteSpace(x)).ToArray();
}
于 2012-06-19T22:49:36.260 回答
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';

}
于 2012-06-19T23:28:02.950 回答
0

我猜你可能被问到的是从字符串之间删除空格,然后用 '\0' 填充数组剩余元素的 char 数组

例如 "Convert this string" 为 "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;
    }
于 2013-06-17T05:29:37.777 回答