背景:我被邀请到一家知名公司接受采访,之前我被问到以下问题,然后被告知我没有采访该职位(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()
。但是我想如果阵列保持相同的大小,就不可能“修剪它”。
答案 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;
}