按字母顺序从字符串中查找并计算后一对

时间:2014-05-04 06:19:59

标签: c# string c#-4.0 count

我正在开发一个C#中的小项目,我希望通过忽略空格和特殊字符来查找和计算后面的字符串顺序。 e.g。

This is a absolutely easy.

这里我的输出应该是

hi 1
ab 1

我审核This帖子,但没有准确了解后者的数量。

2 个答案:

答案 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]);
}