如何确定单词是否为回文并获取特定字母的计数

时间:2017-03-20 09:37:08

标签: c# counter

回文结构是从开始到结束或从结束到开始向后读取的任何字符串。例如,雷达和独奏都是回文。

如何编写代码以确定字符串是否为回文并计算字符串中指定字母的存在频率?

以下代码确定字符串是否为回文结构,但未获取指定字符的计数:

namespace oefening_2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Geef een random in: "); //console stel vraag
            string sWrd = Console.ReadLine();//console slaagt woord op

            Console.WriteLine("geef een random letter in: ");//console stele nog een vraagt
            string sletter = Console.ReadLine();//console slaagt letter op

            string sWoordOmge = ReverseString(sWrd);
            IsPalin(sWrd, sWoordOmge);
            Console.ReadLine();
        }
        //script
        public static void IsPalin(string s1, string sWoordOmge)
        {
            if (s1 == sWoordOmge)
                Console.Write("Het {0} is een palindroom", s1);//console geeft antwoord
            else
                Console.Write("Het {0} is geen palindroom", s1);//console geeft antwoord als het geen palindroom is
        }
        //berekeningen van console
        public static string ReverseString(string s1)
        {
            string sWoordOmge = "";
            for (int i = (s1.Length - 1); i >= 0; i--)
                sWoordOmge += s1.Substring(i, 1);
            return sWoordOmge;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果您要在本网站上提问,那么您将需要更加努力地使用英语。将一些英语与荷兰语混合起来效果不佳。

反转字符串的另一个选项是this代码:

public static string ReverseString( string s )
{
    char[] charArray = s.ToCharArray();
    Array.Reverse( charArray );
    return new string( charArray );
}

反向字符串方法的问题在于它会在每次迭代时创建一个新字符串 - 对于大字符串来说效率非常低。如果你需要编写一个显示反转字符串的机制的方法,那么另一种选择是在你的方法中使用相同的逻辑,但是改为使用StringBuilder对象,然后简单地从StringBuilder的ToString方法返回最终的字符串。 / p>

以下是我对此问题的完整解决方案:

public static void TestPalin()
{
   // This method prompts the user for a word and a letter.
   // It then determines whether or not the word is a palindrome and the number of times the letter appears in the palindrome.
   //
   Console.WriteLine("Enter a word: ");
   string word = Console.ReadLine(); // Read in the word from the console.

   Console.WriteLine("Enter a letter: ");
   char letter = Console.ReadLine()[0]; // Read in the specified letter from the console.

   int letterCount;
   string reverseWord = ReverseAndGetCharCount(word, letter, out letterCount);
   IsPalin(word, reverseWord, letter, letterCount);
   Console.ReadLine();
}

public static void IsPalin(string word, string reverseWord, char letter, int letterCount)
{
   // This method is used to display the result of the TestPalin method.
   //
   if (word == reverseWord)
      Console.WriteLine($"The word {word} is a palindrome");
   else
      Console.WriteLine($"The word {word} is not a palindrome");
   Console.WriteLine($"The letter {letter} appeared {letterCount} times within the word");
}

public static string ReverseAndGetCharCount(string s1, char selectedChar, out int countChar)
{
   // This method reverses a string and counts the number of times the selected letter appears in the word.
   //
   char[] charArray = s1.ToCharArray();
   char[] reverseArray = new char[s1.Length];

   countChar = 0;
   int j = 0;
   char c;
   for (int i = s1.Length - 1; i >= 0; i--)
   {
      c = charArray[i];
      reverseArray[j++] = c;
      if (c == selectedChar)
         countChar++;
   }
   return new string(reverseArray);
}

风格方面,您应该知道,使用类的类型(也称为匈牙利表示法)启动变量是不流行的。因此,像sWrd这样的变量名称应该简单地命名为word。

你应养成在每种方法开头写评论的习惯,以简要说明该方法的作用。除非它非常复杂,否则不要描述方法在注释中的工作方式。只需简单地描述一两行应该做什么。

最后,从C#6开始,字符串现在可以使用string interpolation,用$字符表示。这样可以减少键入内容,从而产生更清晰的代码。