Замена символов на буквы

245
03 февраля 2018, 22:46

Есть программа,которая должна выводить слово,где буквы заменены на символ '_' и пользователь по 1 букве угадывает этого слово. Проблема в том,что программа выводит только 1 букву и заменяется тоже только по одной и после ввода слова по буквам не прекращает работать. Помогите найти ошибку.

        string[] slovo = new string [] {"algoritm"};
        char[] guess = new char[slovo.Length];
        for (int p = 0; p < slovo.Length; p++)
            guess[p] = '_';
        while(true)
        {
            Console.WriteLine(guess);
            char bukva = Convert.ToChar(Console.ReadLine());
            for (int j=0; j < slovo.Length; j++)
            {
                if (slovo[j].Contains(bukva))
                    guess[j] = bukva;
                else
                    Console.WriteLine("Takoj bukvi net!");
            }

      }
Answer 1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Text;
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            string slovo = "algoritm"; // Ваше слово
            string guess = "________"; // Ваш ответ
            StringBuilder sb = new StringBuilder(guess); // Для изменения букв по индексу
            while(true)
            {
                Console.WriteLine(guess); // Выводим ваш ответ
                char bukva = Convert.ToChar(Console.ReadLine()); // Считываем букву
                for (int i = 0; i < slovo.Length; i++) // Лучше использовать массив, т.к. Contains показывает лишь 1 вхождение, а таких букв в слове может быть больше
                {
                    if (slovo[i] == bukva) 
                    {
                        sb[i] = bukva; // Если есть совпадение, заменяем '_' на эту букву
                    }
                    guess = sb.ToString(); // Приводим наш объект StringBuilder  к типу String для WriteLine при следующей итерации
                }
            }
        }
    }
}

Надеюсь, условие выхода из программы допишете сами.
Также не забудьте вставить using System.Text для работы с StringBuilder.

UPDATE

Если вы решили использовать имя переменной guess, соблюдайте то же для других имен. Прим. вместо slovo используйте word. Не очень хорошая практика давать такие разные названия.

Answer 2
        string slovo = "algoritm";
        char[] guess = new char[slovo.Length];
        for (int p = 0; p < guess.Length; p++)
            guess[p] = '_';
        while (true)
        {
            Console.WriteLine(guess);
            string bukva2 = Console.ReadLine();
            char bukva = ' ';
            if (bukva2.Length == 1) 
            bukva = Convert.ToChar(bukva2);
            bool EstBukva = false;
            for (int j = 0; j < slovo.Length; j++)
            {
                if (slovo[j] == bukva)
                {
                    guess[j] = bukva;
                    EstBukva = true;
                }
            }
            if (!EstBukva)
            {
                Console.WriteLine("Takoj bukvi net!");
                Console.ReadKey(true);
            }
            Console.Clear();
        }

Я бы сделал так

READ ALSO
Использование GetFocusedRowIndex в двух разных окнах

Использование GetFocusedRowIndex в двух разных окнах

Имеется строка (появляется после клика по дереву):

217
Как выставить у всех элементов списка значение?

Как выставить у всех элементов списка значение?

как выставить у всех сразу параметр IsEnabled = false

272
Как получить полный список программ в автозагрузке

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

Пытаюсь получить список автозагрузки:

144
Как программно пробросить порт [требует правки]

Как программно пробросить порт [требует правки]

Как программно пробросить порт (нужен пример на языке си шарп)

153