这个问题跟正则没什么关系 private string CountChar(string src) { Dictionary<char, int> dic = new Dictionary<char, int>(); foreach (char c in src) { if (dic.Keys.Contains(c)) dic[c]++; else dic.Add(c, 1); } StringBuilder sb = new StringBuilder(); foreach (char a in dic.Keys) sb.Append(string.Empty + a + dic[a]); return sb.ToString(); } //调用 string test = "aaabbscsccs"; richTextBox2.Text = CountChar(test); //输出:a3b2s3c3
嗯,刚刚在一个帖子里偷学回来的string test = "aaabbscsccs"; var result = from c in test group c by c; foreach (var g in result) richTextBox2.Text += string.Empty + g.Key + g.Count(); //输出:a3b2s3c3
string test = "aaabbscsccs"; var result = from c in test group c by c; foreach (var g in result) richTextBox2.Text += string.Empty + g.Key + g.Count(); //输出:a3b2s3c3 用Linq的确方便.
有很多的。刚昨天看到一样的帖子!里面用了各语言和技术,很好! http://topic.csdn.net/u/20090113/11/fae56d8d-dc0b-4a22-899e-3f5f8986ffaa.html 就这个贴。真的学了很多! 求算一任意长度字符串中不同的字符以及它的个数?(设计一个漂亮的算法,快而优美) 如在 字符串"abcdefgabc"中求算出的结果是 a,2 b,2 c,2 d,1 e,1 f,1 g,1 以一个普通的算法开个头吧. public static class MyMethod { public static Queue <char> GetOnlyCharFromString(string str) { Queue <char> myQueue = new Queue <char>(); for (int i = 0; i < str.Length; i++) { if (myQueue.Contains(str[i]) == false) myQueue.Enqueue(str[i]); } return myQueue; } public static Dictionary <char,int> GetInfoFormString(string str) { Queue <char> myQueue = GetOnlyCharFromString(str ); Dictionary <char,int> myDictionary=new Dictionary <char,int>(); int oldQueueCount = myQueue.Count;//记录下它原有的量; for(int i=0;i <oldQueueCount ;i++) { char myChar=myQueue.Dequeue(); int num=0; for(int j=0;j <str.Length;j++) { if(str[j]==myChar) num++; } myDictionary.Add(myChar,num); } return myDictionary; } }
string pstr = @"(\w)\1*";
MatchCollection mc = Regex.Matchs(str,pstr);
str = "";
for(int i=0;i<mc.Count;i++)
{
str += mc[i].Value.SubString(0,1)+mc[i].Value.Length.ToString();
}
//输出str
//试试
应为MatchCollection mc = Regex.Matches(str, pstr);
应为MatchCollection mc = Regex.Matches(str, pstr);
这个问题跟正则没什么关系
private string CountChar(string src)
{
Dictionary<char, int> dic = new Dictionary<char, int>();
foreach (char c in src)
{
if (dic.Keys.Contains(c))
dic[c]++;
else
dic.Add(c, 1);
}
StringBuilder sb = new StringBuilder();
foreach (char a in dic.Keys)
sb.Append(string.Empty + a + dic[a]);
return sb.ToString();
}
//调用
string test = "aaabbscsccs";
richTextBox2.Text = CountChar(test);
//输出:a3b2s3c3
var result = from c in test group c by c;
foreach (var g in result)
richTextBox2.Text += string.Empty + g.Key + g.Count();
//输出:a3b2s3c3
{
int length=str.Length;
string result=string.Empty;
while(length>0)
{
string tempChar=str[0].ToString();
str=str.Replace(tempChar,"");
result+=tempChar+(length-str.Length);
length=str.Length;
}
return result;
}
这里很多
{
string[] shu=new string[str.Length];
string sr="";
for(int i=0;i<str.Length;i++)
{
shu[i]=str.Substring(i,1);
}
for(int i=0;i<shu.Length;i++)
{
int jishu=0;
string dang=shu[i];
for(int j=0;j<shu.Length;j++)
{
if(dang==shu[j] && shu[j]!=null)
{
jishu++;
shu[j]=null;
}
}
if(dang!=null)
sr+=dang+jishu.ToString();
}
return sr;
}
写完之后,还是觉得11楼的比较简洁
var result = from c in test group c by c;
foreach (var g in result)
richTextBox2.Text += string.Empty + g.Key + g.Count();
//输出:a3b2s3c3
用Linq的确方便.
http://topic.csdn.net/u/20090113/11/fae56d8d-dc0b-4a22-899e-3f5f8986ffaa.html
就这个贴。真的学了很多!
求算一任意长度字符串中不同的字符以及它的个数?(设计一个漂亮的算法,快而优美)
如在 字符串"abcdefgabc"中求算出的结果是
a,2
b,2
c,2
d,1
e,1
f,1
g,1 以一个普通的算法开个头吧.
public static class MyMethod
{
public static Queue <char> GetOnlyCharFromString(string str)
{
Queue <char> myQueue = new Queue <char>();
for (int i = 0; i < str.Length; i++)
{
if (myQueue.Contains(str[i]) == false)
myQueue.Enqueue(str[i]);
}
return myQueue;
}
public static Dictionary <char,int> GetInfoFormString(string str)
{
Queue <char> myQueue = GetOnlyCharFromString(str );
Dictionary <char,int> myDictionary=new Dictionary <char,int>();
int oldQueueCount = myQueue.Count;//记录下它原有的量;
for(int i=0;i <oldQueueCount ;i++)
{
char myChar=myQueue.Dequeue();
int num=0;
for(int j=0;j <str.Length;j++)
{
if(str[j]==myChar)
num++;
}
myDictionary.Add(myChar,num);
}
return myDictionary;
} }
string str="aaaabbbbcccccKKKK";
循环遍利字符串数组,如果是a,那么CountA++;如果是b,那么CountB++.....
最后输出 a+"{0}"..b{1}..,CountA,CountB,...
随便搞的几下,按照这个思路是应该没有问题的,呵呵!!~~~
foreach (var x in
a.ToCharArray().GroupBy(s => s).Select(s => s.Key.ToString() + s.Count().ToString()))
{
Console.Write(x);
}这个程序有个缺点,如果同一组数中间有间隔,结果就不对了,比如这个
string a = "aaaabbbbcccccbbKKKK";
输出:a4b6c5K4,而不是 a4b4c5b2K4
如果输出是后者,用一条LINQ可能不行了