我正在开发一个C#中的小项目,我希望通过忽略空格和特殊字符来查找和计算后面的字符串顺序。 e.g。
This is a absolutely easy.
这里我的输出应该是
hi 1
ab 1
我审核This帖子,但没有准确了解后者的数量。
答案 0 :(得分:2)
首先我删除你指定的空格和特殊字符,只需查看字符串并检查当前字符是否为字母:
private static string GetLetters(string s)
{
string newString = "";
foreach (var item in s)
{
if (char.IsLetter(item))
{
newString += item;
}
}
return newString;
}
我写了一个方法,用简单的逻辑检查下一个字母是否按字母顺序排列。我降低了字符的大小写并检查当前字符的ASCII代码+ 1是否等于下一个字符。如果是,那当然是相同的:
private static string[] GetLetterPairsInAlphabeticalOrder(string s)
{
List<string> pairs = new List<string>();
for (int i = 0; i < s.Length - 1; i++)
{
if (char.ToLower(s[i]) + 1 == char.ToLower(s[i + 1]))
{
pairs.Add(s[i].ToString() + s[i+1].ToString());
}
}
return pairs.ToArray();
}
以下是主要方法的外观:
static void Main()
{
string s = "This is a absolutely easy.";
s = GetLetters(s);
string[] pairOfLetters = GetLetterPairsInAlphabeticalOrder(s);
foreach (var item in arr)
{
Console.WriteLine(item);
}
}
答案 1 :(得分:1)
首先,我会对字符串进行规范化,以减少与this等特殊字符的混淆:
string str = "This is a absolutely easy.";
Regex rgx = new Regex("[^a-zA-Z]");
str = rgx.Replace(str, "");
str = str.ToLower();
然后,我会遍历字符串中的所有字符,看看他们的邻居是否是字母表中的下一个字母。
Dictionary<string, int> counts = new Dictionary<string, int>();
for (int i = 0; i < str.Length - 1; i++)
{
if (str[i+1] == (char)(str[i]+1))
{
string index = "" + str[i] + str[i+1];
if (!counts.ContainsKey(index))
counts.Add(index, 0);
counts[index]++;
}
}
从那里打印计数非常简单。
foreach (string s in counts.Keys)
{
Console.WriteLine(s + " " + counts[s]);
}