gpt4 book ai didi

c# - 来自 "Programming Interviews Exposed"的代码练习

转载 作者:行者123 更新时间:2023-11-30 14:15:49 26 4
gpt4 key购买 nike

这是书中的代码 - “Programming Interviews Exposed”第 2 版 - 第 78 和 79 页- 删除指定字符练习(下续)

void Main()
{
string se = "I_am_the_string_to_modify";
string re = "amthe";

Console.WriteLine(se);
Console.WriteLine(re);

char[] s=se.ToCharArray();
char[] r=re.ToCharArray();
bool[] flags=new bool[128];

int len=s.Length;
int src,dst;

for(src=0;src<len;++src)
{
Console.Write(r[src]+",");
flags[r[src]]=true;
}

src=0;
dst=0;

while(src<len)
{
if(!flags[(int)s[src]])
{
s[dst++]=s[src];
}
++src;
}
string str=new string(s,0,dst);
Console.WriteLine(str);
}

如果我尝试运行它,我会得到 IndexOutOfRangeException: Index was outside the bounds of the array. 由于第 18 行。作者试图在第 26 行做同样的事情。

重点是创建一个查找数组来标识要删除的字符。我有这个的工作版本,但我没有使用嵌套数组索引。

有什么方法可以让它起作用吗?我不明白嵌套数组是如何工作的。

最佳答案

这不是 C# 程序。它是扩展名为 .cs 的 C 源代码。

在 80 年代和 90 年代初,当我们 C 程序员学习 C++ 时,我们都是这样做的:Think C and transpose to C++。那是学习 C++ 的最糟糕的方式。用 C# 做就更糟了。用 C# 编程时,永远不要考虑 C。

FWIW,这是 LINQ .NET 4 中问题的解决方案:

Console.WriteLine(string.Concat(se.Where(ch => re.IndexOf(ch) < 0)));

这是一个 Regex -based 解决方案(可以说不太好,因为它可能会因 re 中的某些特殊字符而失败):

Console.WriteLine(new Regex("["+re+"]").Replace(se, ""));

关于c# - 来自 "Programming Interviews Exposed"的代码练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9272686/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com