Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修剪字符数组_C#_Arrays - Fatal编程技术网

C# 修剪字符数组

C# 修剪字符数组,c#,arrays,C#,Arrays,背景:我被邀请参加一家知名公司的面试,在被告知该职位(C#,mvc3,razor)面试失败之前,我被问了以下问题我对如何解决这个问题非常感兴趣。 问题:“编写一个方法,该方法接受一个char数组,修剪空白,并返回相同的数组。”经过一些思考后,我被告知将空白替换为“\o” 我从以下几点开始: public static char[] Trim(char[] c) { for (int i = 0; i < c.Length; i++) {

背景:我被邀请参加一家知名公司的面试,在被告知该职位(C#,mvc3,razor)面试失败之前,我被问了以下问题我对如何解决这个问题非常感兴趣。

问题:
“编写一个方法,该方法接受一个char数组,修剪空白,并返回相同的数组。”
经过一些思考后,我被告知将空白替换为“\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';
            }     
        }
    }
publicstaticchar[]Trim(char[]c)
{
对于(int i=0;i

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

它们可能意味着\0(NUL字符),而不是破折号-0

假设它们意味着用空字符替换空白字符,那么解决方案很简单:

步骤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';
    }
}
publicstaticvoidtrim(Char[]str){
int maxI=0;//一个优化选项,这样它就不会遍历已经遇到的字符
对于(int i=0;imaxI;i--){
if(Char.IsWhitespace(str[i])str[i]='\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';

}
publicstaticvoidtrim(Char[]str){
int非空索引=0;
int lastNonNullIndex=0;
对于(inti=0;i0)非NullIndex++;
如果(!Char.IsWhitespace(str[i])lastNonNullIndex=i;
}
非空索引++
str[lastNonNullIndex]='\0';
}

我想可能会要求您删除字符串之间的空白,然后用“\0”填充数组中剩余元素的字符数组

e、 g.“转换此字符串”为“转换此字符串”,并用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;
    }
char[]trimmwhitespace(char[]source)
{
int i,j=0;
对于(i=0;i
这听起来像是一个措辞糟糕的问题。。。有些面试官故意问他们,看你是否愿意问问题。只是一点面试技巧。当我采访亚马逊时,他们几次改变主意,只是为了看我是否会生气。好吧,别沮丧。在多个层面上,这对我来说似乎是一个糟糕的面试问题。(1.使用/返回同一个字符数组是做作和荒谬的2.首先使用字符数组是愚蠢的3.试图在C#中硬塞进以null结尾的字符串的想法是令人讨厌的4.这根本不是一个需要解决的问题;只是一个试图困住你的“gotcha”问题。)@Pheonixblade9我同意——措辞很奇怪,我猜目的是让受访者提问并谈论问题。提出问题以解决“问题背后”的真正问题可能是这里的目标,而不是代码解决方案…@Pheonixblade9我可以同意,他可能想看看我问了什么问题。相信我,我做到了,这似乎更让他生气。我不是因为被问到这个问题而生气,我想知道为什么我通过了人力资源和技术电话,被要求出来参加面试,却被告知我在一个问题后被拒绝了……他们因为你没有回答这个措辞糟糕的问题而严肃地拒绝了你?你可能不想为他们工作,你会在六个月内满头白发。如果我错了,请纠正我,但这将在内部创建一个没有空格字符的新字符数组。是的,但回答了问题。他们给你的例子没有删减空格,而是将字符设置为空字符。问题是我不能返回新数组,它必须是同一个数组。Lol-我也会被引导;)David,我忘了提到我还必须将所有“\o”字符移到末尾。
    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;
    }