Задать вопрос

Почему чат-бот не читает пробелы в БД?

Здравствуйте! Пишу очень простого чат-бота на C# в Visual Studio. Но он почему-то не читает пробелы фраз из блокнота.
В блокноте в столбик фраз (привет, привет, как дела?, хорошо, пока, пока). Так вот на "привет" и "пока" отвечает, а "как дела?" не читает, потому что там пробел и знак вопроса. Кодировка в текстовом файле UTF-8. Выкладываю код.
using System;
using System.IO;

namespace Chat
{
    class Program
    {

        static string Trim(string str, char[] chars)
        {
            string strA = str;

            for (int i = 0; i <chars.Length; i++)
            {
                strA = strA.Replace(char.ToString(chars[i]), "");
            }
            return strA;
        }


        static string Ans(string q)
        {

            string tr = ")(:^^=!?",
            ans = "";

            q = q.ToLower();
            q = Trim(q, tr.ToCharArray());
            string[] baza = File.ReadAllLines("C://Users//Лариса//Desktop//Фото и документы//Математика и инфа//C#//1.txt");

            for (int i = 0; i <baza.Length; i+=2)
            {
                if (q == baza[i])
                {
                    ans = baza[i + 1];
                    break;
                }
            }
            return ans;
        }



        public static void Main()
        {
            while (true)
            {
                Console.Write("Ваш вопрос: ");
                string q = Console.ReadLine();
                Console.WriteLine("Бот сказал: " + Ans(q) + "\n");

            }
        }
    }
}
  • Вопрос задан
  • 95 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
FoggyFinder
@FoggyFinder
Проблема не в наличии пробельного символа в фразе вопроса, а в символе ?.

В методе поиска соответствующего слова Ans вы удаляете из вопроса все вхождения следующих символов:

")(:^^=!?"

Один из которых встречается в ключевой фразе "Как дела?".

На данном этапе, вы можете делать аналогичное "удаление" символов для каждого вопроса из списка слов:

if (q == Trim(baza[i], tr.ToCharArray()))

Кроме этого оставлю несколько комментариев по коду:

1. В методе Ans вы каждый раз считываете значения из файла по новой. На данном этапе лучше вынести получение данных в отдельный метод.
2. Для хранения пары "ключ-значение" отлично подойдет структура данных [Словарь](https://docs.microsoft.com/en-us/dotnet/api/system...
Ответ написан
Комментировать
Azamat_Amazing
@Azamat_Amazing
C#
Почему в методе Ans, в цикле шаг равен 2 ?
Как писали выше, лучше изменить формат вопрос-ответ. Я бы предложил положить в json файл.
[
{
"question": "как дела?",
"answer" "хорошо"
},
...
]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы