算法大挑战,简单问题考验算法

FlowerJunjie 2009-04-30 03:17:55

string str1 = "AA
  • BBCC
  • DDE
  • EFF";
    string str2 = "1,2,3";
    string str3 = "AA1BBCC2DDE3EFF";

写个方法处理 str1,str2,按str3的格式输出。
...全文
309 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
FlowerJunjie 2009-05-06
  • 打赏
  • 举报
回复
up,强人真多
结贴!
zzxap 2009-05-05
  • 打赏
  • 举报
回复
把非字母数字过滤掉就行了
huanglaobo 2009-05-05
  • 打赏
  • 举报
回复
把15楼的下面这段代码:

if (tmpFill.Count > number)
{
//判断处理在这里 如果不为*的情况给分别处理
switch (tmpC.ToString())
{
case "*":
result.Append(tmpFill[number]);
break;
default:
break;
}
}



改成:

if (tmpFill.Count > number)
{
//判断处理在这里 如果不为*的情况给分别处理
// IsNumberic为判断字符串是否为数字的函数,返回bool
if(IsNumberic(tmpC))
{
int tmpIndex = int.Parse(tmpC);
if(tmpFill.Count > tmpIndex)
result.Append(tmpFill[tmpIndex]);
}
switch (tmpC.ToString())
{
case "*":
result.Append(tmpFill[number]);
break;
default:
break;
}
}

huanglaobo 2009-05-05
  • 打赏
  • 举报
回复
哦,我补充一下增加的这段代码的意义。
我觉得你后来改的
string str1 = "AA[121]BBCC[123]DDE[124]EFF";

其中的121,123,124.
是属于 string str2 = "1,2,3"; 中第121,123,124个逗号之前的那个数.
所以,那么改就可以了。
huanglaobo 2009-05-05
  • 打赏
  • 举报
回复
对了,有段代码错了。我改下:
if(IsNumberic(tmpC))
{
int tmpIndex = int.Parse(tmpC);
if(tmpFill.Count > tmpIndex)
result.Append(tmpFill[tmpIndex]);
}
改成:
if(IsNumberic(tmpC))
{
int tmpIndex = int.Parse(tmpC);
if(tmpFill.Count > tmpIndex)
result.Append(tmpFill[tmpIndex-1]);
}
我姓区不姓区 2009-05-05
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 FlowerJunjie 的回复:]
不好意思,题目起大了
不过现在需求又改了,

C# codestringstr1="AA[16]BBCC[17]DDE[18]EFF";

or

C# codestringstr1="AA[121]BBCC[123]DDE[124]EFF";

也就是说*改成数字
正则怎么改一下?

[/Quote]
\*改为\d+
FlowerJunjie 2009-05-04
  • 打赏
  • 举报
回复
不好意思,题目起大了
不过现在需求又改了,

string str1 = "AA[16]BBCC[17]DDE[18]EFF";


or

string str1 = "AA[121]BBCC[123]DDE[124]EFF";


也就是说*改成数字
正则怎么改一下?
Mr_Long 2009-04-30
  • 打赏
  • 举报
回复

百家争鸣呢!
qx8668 2009-04-30
  • 打赏
  • 举报
回复
标题党。。
余易键1303 2009-04-30
  • 打赏
  • 举报
回复
学习了
sushou2009 2009-04-30
  • 打赏
  • 举报
回复
见识了~~哈哈
huanglaobo 2009-04-30
  • 打赏
  • 举报
回复
顺便再改下四楼的代码:

string str1 = "AA
  • BBCC
  • DDE
  • EFF";
    string str2 = "1,2,3";
    string
  • [] temp = fillItem.Split(',');
    int i = 0;
    string str3 = Regex.Replace(aimSource, @"\[\*\]", p => temp[i++]);
    Console.WriteLine(str3);
huanglaobo 2009-04-30
  • 打赏
  • 举报
回复
忘了写调用方法了。

string item1 = "AA
  • BBCC
  • DDE
  • EFF";
    string item2 = "1,2,3";
    string item3 = StringFill.Fill
  • (item1, item2);
huanglaobo 2009-04-30
  • 打赏
  • 举报
回复
写一个复杂点的。

public static string Fill(string aimSource, string fillItem)
{
List<string> tmpFill = new List<string>();
StringBuilder tmpS = new StringBuilder();
for (int i = 0; i < fillItem.Length; i++)
{
if (fillItem[i] == ',')
{
tmpFill.Add(tmpS.ToString());
tmpS = new StringBuilder();
continue;
}
tmpS.Append(fillItem[i]);
}
tmpFill.Add(tmpS.ToString());

tmpS = new StringBuilder();
StringBuilder result = new StringBuilder();
StringBuilder tmpC = new StringBuilder();

bool ifKuohao = false;
int number =0;
for (int i = 0; i < aimSource.Length; i++)
{
if (aimSource[i] == '[')
{
result.Append(tmpS.ToString());
tmpS = new StringBuilder();
ifKuohao = true;
continue;
}
if (aimSource[i] == ']')
{
if (tmpFill.Count > number)
{
//判断处理在这里 如果不为*的情况给分别处理
switch (tmpC.ToString())
{
case "*":
result.Append(tmpFill[number]);
break;
default:
break;
}
}
tmpC = new StringBuilder();
ifKuohao = false;
number++;
continue;
}
if (ifKuohao)
tmpC.Append(aimSource[i]);
else
tmpS.Append(aimSource[i]);
}
if (!ifKuohao)
result.Append(tmpS.ToString());

return result.ToString();
}
ASPNETDB 2009-04-30
  • 打赏
  • 举报
回复
code=C#]string str1 = "AA
  • BBCC
  • DDE
  • EFF";
    string str2 = "1,2,3";
    string
  • [] temp = str2.Split(',');
    int i = 0;
    string str3 = Regex.Replace(str1, @"\[\*\]", delegate(Match match) { return temp[i++]; });
    Console.WriteLine(str3);
    Console.ReadLine();[[/code]
    厉害啦。
格拉 2009-04-30
  • 打赏
  • 举报
回复
wl
birdinskyliuyuan 2009-04-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 asdf4525qd 的回复:]
因为只要求把那两个str的值变成str3的,所以我取个巧
string str1 = "AA
  • BBCC
  • DDE
  • EFF";
    string str2 = "1,2,3";
    string str3 = str1.Replace
  • ("A
  • B", "A1B"
  • ).Replace("C
  • D", "C1D"
  • ).Replace("E
  • E", "E1E"
  • );
    [/Quote]
    我也受起发了
    Console.WriteLine("AA1BBCC2DDE3EFF");
asdf4525qd 2009-04-30
  • 打赏
  • 举报
回复
因为只要求把那两个str的值变成str3的,所以我取个巧
string str1 = "AA
  • BBCC
  • DDE
  • EFF";
    string str2 = "1,2,3";
    string str3 = str1.Replace
  • ("A
  • B", "A1B"
  • ).Replace("C
  • D", "C1D"
  • ).Replace("E
  • E", "E1E"
  • );
xunaipeng 2009-04-30
  • 打赏
  • 举报
回复
不错
jest850615 2009-04-30
  • 打赏
  • 举报
回复
题目起得忒吓人,进来倒看不出有什么算法
加载更多回复(8)

110,529

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧