我正在创建一个图表(字符串中的2个字母的频率(如aa,ac,bh,is)) 假设文本中没有特殊字符,没有空格。只有字母。
string text;
char char1[]= {a,b,c,....z}; //26 alphabets
int[][] count=null;
for (i = 0; i < 26; i++)
{
for (j = 0; j < 26; j++)
{
count[i][j] = text.Count(char[i]char[j]); <---- this is the problem
}
}
所以count [] []会显示文本中所有字母对的出现次数 像aa 10,ab 5 n等...
for循环中的语句只是为了说明需要做什么。 我正在考虑使用foreach循环,但我们无法读取foreach中的两个字符。 我可以使用开关但在开关中必须写26x26 = 676个案例lol
被困在这里.. 我怎么从字符串中读取2个字符?并在整个字符串中计算它们的出现次数
答案 0 :(得分:1)
如果您使用LINQ,它将成为一个简单的解决方案。字符串上有一个Split方法,您可以使用它在数组中拆分字符串并迭代它。
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
string text = "this is a ss and mm is not to be count an me"; //Input string
// Find only 2 letter strings
List<string> allTwoLetters = text.Split(new Char[]{' '}).Where(x=>x.Length==2).ToList();
//Find all Distinct strings in two letter string list
List<string> distinctStrings = allTwoLetters.Distinct().ToList();
//dictionary to hold result
Dictionary<string,int> letterCount = new Dictionary<string,int>();
//Iterate throug each string in distinct string and count how many such strings are there i two letter list of strings
foreach(string current in distinctStrings)
{
letterCount.Add(current,allTwoLetters.Where(p=>p == current).ToList().Count);
}
//Output values
foreach(var kvp in letterCount)
{
Console.WriteLine(kvp.Key + " - "+ kvp.Value);
}
}
}
答案 1 :(得分:0)
使用Regex尝试这样的事情。
string text = "aabbcc";
char[] char1 = { 'a', 'b', 'c' , 'z' }; //26 alphabets
int[,] count = new int[char1.Length, char1.Length];
for (int i = 0; i < char1.Length; i++)
{
for (int j = 0; j < char1.Length; j++)
{
count[i,j] = Regex.Matches(text, string.Concat(char1[i],char1[j]), RegexOptions.IgnoreCase).Count;
}
}
注意我将RegexOption设置为忽略大小写,但如果您想要区分大小写,则可以将其删除。
答案 2 :(得分:0)
与LINQ答案类似,但没有LINQ。这使用一个字母,其中两个字母对作为键,int作为计数。
string text ="asasdfasdf";
char[] alphabet = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
Dictionary<string,int> letterCombos = new Dictionary<string,int>();
for (int i = 0; i < 26; i++)
{
for (int j = 0; j < 26; j++)
{
letterCombos.Add(alphabet[i] + alphabet[j].ToString(), 0);
}
}
char[] textCharArray=text.ToCharArray();
for (int i =0;i<text.Length-1;i++)
{
string partial = textCharArray[i] + textCharArray[i + 1].ToString();
letterCombos[partial]++;
}
foreach (KeyValuePair<string, int> kp in letterCombos)
{
Console.WriteLine(kp.Key +": "+kp.Value);
}