сколько раз символ повторялся в случайной строке

#c# #random #char

Вопрос:

У меня есть этот код, который представляет собой простой игры вы выбираете, сколько вопросов и сколько символов вы хотите, и программа генерирует случайную строку символов и чисел, но как я могу выбрать один случайный характер, каждый вопрос и спросить пользователя, сколько раз этот символ неоднократно, например, сколько раз символ повторяются в этой строке: iasfhAjfalkjA ответ = 2 раза

Я не знаю, должен ли я поместить весь код, но я думаю, что это поможет, вот мой код

 {  class MainClass  {  public static void Main(string[] args)  {  Random randomgen = new Random();  int a; string Sa; int b; string sb;  int maxanswer = 0;  int m = 0;  string question;  string sss;  string quit = "QUIT";  string useranswer;  string answer ;  int numofquestions;  int numofquestionsleft;  int numofcorrect = 0;  int numoffalse = 0;   //ASKING THE USER FOR THE MAX NUMBER OF QUESTIONS WANT TO BE ASKED  Console.Write("Max Question : ");  numofquestions = Convert.ToInt32(Console.ReadLine());  numofquestionsleft = numofquestions;  //ASKING THE USER TO PUT A NUMBER BETWEEN 3 AND 100 THAT WILL HELP GENERATE A RANDOM string    Console.WriteLine("enter a value between 3 and 100");  Sa = Console.ReadLine(); a = Int32.Parse(Sa);  //here is the random generating part  String sarffsa = "A1a2B3b4C5c6D7d8E9eFfGgHhIiKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";   while (numofquestionsleft gt; 0 amp;amp; m lt;= numofquestions   1)  {  int length = a;   String random = "";   for (int i = 0; i lt; length; i  )  {  int alphapet = randomgen.Next(42);  random = random   sarffsa.ElementAt(alphapet);    }  Console.WriteLine("How many time the symbol has been repeted in the follwing characters: {0}", random);   answer = Console.ReadLine();   // adding the question and the user answer and the right answer to an array  questionlist[m] = random;  useranswer = Convert.ToString(Console.ReadLine());  useranswerlist[m] = answer;  rightanswerslist[m] = answer;   Console.WriteLine("--------------------------------------------------------");  // IF USER TYPE QUIT THAT WILL SKIP THE QUESTION AND ADD IT TO WRONG ANSWERS LIST  if (answer== quit)  {  numofquestionsleft--;  ;  continue;   }      numofquestionsleft--;  //LOOP  m  ;  }   while (1 lt; 2)  {  Console.WriteLine(@"TO GET THE NUMBER OF THE RIGHT ANSWERS PRESS 1 TO GET THE NUMBER OF THE WRONG ANSWERS PRESS 2 TO GET THE OPERATION WITH THE MAX NUMBERS OF RIGHT ANSWERS PRESS 3 TO GET THE OPERATION WITH THE MAX NUMBERS OF FALSE ANSWERS PRESS 4 TO VIEW ALL THE QUESTIONS AND YOUR ANSWERS AND CORRECT ANSWERS TYPE 5 TO EXIT TYPE EXIT ");  sb = Console.ReadLine();   b = Int32.Parse(sb);  switch (b)  {  // the number of right answers   case 1:  Console.WriteLine("-----------------------------------------------");  Console.WriteLine("You have = "   numofcorrect   " Right answers");  Console.WriteLine("-----------------------------------------------");  break;  case 2:  // the number of wrong answers  Console.WriteLine("-----------------------------------------------");  Console.WriteLine("You have = "   numoffalse   " Wrong answers");  Console.WriteLine("-----------------------------------------------");  break;  // Making the rightoperationlist into a group in order and count to show the most frequent array used  case 3:  var result = (from operation in rightoperationlist  group operation by operation into og  orderby og.Count() descending  select og.Key).FirstOrDefault();    Console.WriteLine("RIGHT ANSWER OPERATION = "   result);   break;  case 4:  // Making the Wrongoperationlist into a group in order and count to show the most frequent array used  var result02 = (from operation in wrongoperationlist  group operation by operation into og  orderby og.Count() descending  select og.Key).FirstOrDefault();  Console.WriteLine("WRONG ANSWER OPERATIONS = "   result02);   break;  //showing the questions and user answer and the right answer arrays  case 5:  Console.WriteLine("QUESTIONS ANSWERS RIGHTANSWERS");  Console.WriteLine("------------------------------------------------------------------------");  for (int z = 0; z lt; numofquestions; z  )  {  Console.WriteLine(questionlist[z]   " "   useranswerlist[z]   " "   rightanswerslist[z]);  }  Console.WriteLine("------------------------------------------------------------------------");  break;   default:  break;   }   }  Console.ReadLine();      }  } }  

Комментарии:

1. Если вам было интересно, почему вы никогда не видите Q или Z в своей строке, проверьте свой randomgen.Next звонок. Это вопрос для домашнего задания?

2. В чем именно заключается ваш вопрос? Я прочитал следующее: «как я выбираю один случайный символ каждый вопрос и спрашиваю пользователя, сколько раз этот символ повторялся». У вас есть проблемы с выбором случайного персонажа? должен ли этот символ быть включен в случайную строку или вы принимаете ответы, которые могут быть равны нулю (и, скорее всего, будут равны нулю, если ваша строка недостаточно длинная). Тогда какова вторая часть вашего вопроса? Вам нужно определить фактический ответ?

Ответ №1:

Чтобы выбрать один случайный символ (в виде строки) в сгенерированной случайной строке:

 var Symbol = random[randomgen.Next(random.Length)].ToString();   

Чтобы получить реальный ответ:

 var GameAnswer = random.Count(c =gt; c.ToString() == Symbol);   

Конечно, если случайный символ должен храниться как a char вместо a string , это становится еще проще, потому что мы можем избавиться от двух ToString() вызовов.

Это становится

 var Symbol = random[randomgen.Next(random.Length)]; // Here Symbol type is char   

Чтобы получить реальный ответ:

 var GameAnswer = random.Count(c =gt; c == Symbol);   

Комментарии:

1. Любопытно, почему ты сделал это со стрингом..

2. Хороший комментарий. Во-первых, это своего рода временный ответ, я даже не уверен, чего на самом деле хочет @safdasfasfasfa, поэтому мой комментарий к его вопросу, на который до сих пор нет ответа.

3. Во-вторых, @safdasfasfasfa использует в своем коде только строки, и я подумал, что введение переменной char ( Symbol )может сбить его с толку. Я склонен использовать var для объявления и инициализации переменных, потому что в Visual Studio этот тип всегда доступен. И это делает проблему менее заметной. Поэтому мне, возможно, также не следует использовать var в таком контексте, чтобы прояснить ситуацию, что, возможно, придало бы мне больше смелости использовать char и избежать двух ToString() вызовов

4. @CaiusJard: отредактировал мой ответ, чтобы отразить ваш комментарий.