简单算法~~ 在BAIDU上看到的东东 大家一起来看下
请用C#回答 调试通过就行 最基本的算法
1。现有文本1.txt 。1.txt文本 中包含字符"#","~".现在要写个程序输出 #和~之间的字符串,#和~之外的字符串用//XXXXX格式输出(有点像语法分析)比如说" ~23ewr#asd asd~ewerr#dwqr~121 "输出结果为:
//~23ewr (有换行)
asd asd
//ewerr
dwqr
//121
2。压缩.现有文本1.txt 里面只含数字0,1 现要对数字进行压缩,压缩方法如下 "0000111000101"压缩为(0,4)+(1,3)+(0,3)+(1,1)+(0,1)+(1,1)
这种形式输出。还原数据的方法也要写出
~!~给出最简最正确算法就有分~~~~
问题点数:30、回复次数:15Top
1 楼oldmoon(电子商务人,电子商务路)回复于 2006-12-01 13:35:21 得分 0
1。现有文本1.txt 。1.txt文本 中包含字符"#","~".现在要写个程序输出 #和~之间的字符串,#和~之外的字符串用//XXXXX格式输出(有点像语法分析)比如说" ~23ewr#asd asd~ewerr#dwqr~121 "输出结果为:
//~23ewr (有换行)
asd asd
//ewerr
dwqr
//121
------------
用两次split就解决Top
2 楼alvachien(白衣战神,四大绝技:C#/C++/T-SQL/ABAP)回复于 2006-12-01 14:17:48 得分 0
1. 实用Regex的Split就可以了
2. 算法问题...Top
3 楼huruihappy()回复于 2006-12-03 22:50:29 得分 0
有人会不Top
4 楼SmallMummy(爬山真累人~!)回复于 2006-12-04 00:15:01 得分 5
1、用C#里面的正则就可以了 正则为(?<=~)[^~]*(?=#)
2、
while(condition)
{
读一个字符;
if (等于前一个字符)
{
计数器+1;
}
else
{
计数器=1;
前一个字符=这个字符;
}
}
Top
5 楼litaoye()回复于 2006-12-04 00:19:01 得分 3
第二个压缩算法效率不够高呀。
0000111000101经过压缩后为:
(0,4)+(1,3)+(0,3)+(1,1)+(0,1)+(1,1)
不是0就是1的话,那么完全可以压缩成为
(0,4)+(3)+(3)+(1)+(1)+(1)Top
6 楼flameearth()回复于 2006-12-04 02:09:34 得分 0
第一题 最简单的方法~~~~~~~哈哈easy 啊
static void Main(string[] args)
{
string filename = "D:\\1.txt";
FileStream fs = File.OpenRead(filename);
Byte[] arr = new byte[100];
UTF8Encoding data = new UTF8Encoding(true);
string str = ""; //从文件中读取数据
while (fs.Read(arr, 0, arr.Length) > 0)
{
str = data.GetString(arr);
}
char[] ch;
ch = str.ToCharArray();//将string写如到char[]
int i = 0, j = 0;
for (i = 0; i < ch.Length; i++)
{
if (ch[i] == '~')
ch[i] = '\n';
}
for (k = 0; k < ch.Length; k++)
{
if (ch[k] == '\n')
{
Console.Write("\n");
Console.Write("/");
Console.Write("/");
Console.Write("~");
k++;
}
if (ch[k] == '#')
{
Console.Write("\n");
k++;
}
Console.Write(ch[k]);
}
Console.Read();
}Top
7 楼flameearth()回复于 2006-12-04 02:14:11 得分 20
上面那个没有换行,还有点小错,这个是真确的~~
上面那个没有换行,还有点小错,这个是真确的~~
static void Main(string[] args)
{
string filename = "D:\\1.txt";
FileStream fs = File.OpenRead(filename);
Byte[] arr = new byte[100];
UTF8Encoding data = new UTF8Encoding(true);
string str = "";
while (fs.Read(arr, 0, arr.Length) > 0)
{
str = data.GetString(arr);
}
char[] ch;
ch = str.ToCharArray();
int i = 0, j = 0, k = 0;
for (i = 0; i < ch.Length; i++)
{
if (ch[i] == '~')
ch[i] = '\n';
// if (ch[i] == '#')
// ch[i] = '\n';
}
for (k = 0; k < ch.Length; k++)
{
if (ch[k] == '\n')
{
Console.Write("\n");
Console.Write("\n");
Console.Write("/");
Console.Write("/");
Console.Write("~");
k++;
}
if (ch[k] == '#')
{
Console.Write("\n");
Console.Write("\n");
k++;
}
Console.Write(ch[k]);
}
Console.Read();
}
上面那个没有换行,还有点小错,这个是真确的~~
Top
8 楼flameearth()回复于 2006-12-04 03:26:30 得分 0
第二题!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Collections;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string filename = "D:\\2.txt";
FileStream fs = File.OpenRead(filename);
Byte[] arr = new byte[100];
UTF8Encoding data = new UTF8Encoding(true);
string str = "";
while (fs.Read(arr, 0, arr.Length) > 0)
{
str = data.GetString(arr);
}
char[] ch;
ch = str.ToCharArray();
ArrayList Res = new ArrayList();
ArrayList zero = new ArrayList();
ArrayList one = new ArrayList();
for (int i = 0; i < ch.Length; i++)
{
if (ch[i] == '0')
{
zero.Add(ch[i]);
if (ch[i + 1] == '1')
{
Res.Add("(0,");
Res.Add(zero.Count);
Res.Add(")+");
}
}
if (ch[i] == '1')
{
one.Add(ch[i]);
if (ch[i + 1] == '0')
{
Res.Add("(1,");
Res.Add(one.Count);
Res.Add(")+");
}
}
}
for (int k = 0; k < Res.Count; k++)
{
Console.Write(Res[k]);
}
Console.Read();
}
}
}Top
9 楼ycqing()回复于 2006-12-04 10:05:22 得分 0
?Top
10 楼huruihappy()回复于 2006-12-04 12:00:22 得分 0
6楼的第2个算法错了 结果不对哦```Top
11 楼huruihappy()回复于 2006-12-04 12:03:21 得分 0
using System.Collections.Generic;?这个是什么?Top
12 楼huruihappy()回复于 2006-12-04 12:04:19 得分 0
010101010111压缩真做起累```想了N久``总是结果有点不对```Top
13 楼flameearth()回复于 2006-12-04 22:12:28 得分 0
第二个算法是对的,不过就是显示有点问题,只要稍加判断就可以了,我一会再改改现在有点事Top
14 楼zhaochong12(超级大笨鸟)回复于 2006-12-04 23:01:36 得分 2
/// 从一个字符串的两个关键字中间得到内容
public string SubStr(string str, string str1, string str2)
{
int start, stop;
start = str.IndexOf(str1, 0, str.Length);
stop = str.IndexOf(str2, 0, str.Length);
return str.Substring(start + str1.Length, stop - start - str1.Length);
}Top
15 楼cinray()回复于 2006-12-05 08:50:07 得分 0
markTop




