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 ではなく、\0 (NUL 文字) を意味していた可能性があります。

于 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

これは見苦しく、テストもされていませんが、新しい配列を作成せずに 1 回のパスですべてを実行します。

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

あなたが求められたのは、文字列の間から空白を削除してから、配列の残りの要素の char 配列を '\0' で埋めることだと思います

例: "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 に答える