Неправильное заполнение списка - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Есть структура списков. есть функция. Функция изначально заменяет двойные пробелы одинарными и убирает другие лишние пробелы, далее делит текст на предложения. Каждое предложение записывает в список sentences.text. Далее определяет вопросительное или утвердительное предложение, а также считает общее кол-во предложений. Все вышеперечисленное работает отлично. а вот после объявления массива подстрок начинается веселье. понимаю, что какую то мелочь упускаю, но какую уже третий день не могу понять. результат этого кода: 1. sefsef.-state- pos 2. do not?-question-quest_deny 3. do not!-state- deny 4. dsefef.-state- pos 5. awdwad?-question-quest_pos 6. do not.-state- deny 7. will not.-state- pos 8. will not?-question-quest_pos 9. efwef.-state- pos вместо: 1. sefsef.-state- pos 2. do not?-question-quest_deny 3. do not!-state- deny 4. dsefef.-state- pos 5. awdwad?-question-quest_pos 6. do not.-state- deny 7. will not.-state-

deny

8. will not?-question-

quest_deny

9. efwef.-state- pos подскажите в чем моя ошибка, кому не трудно.
        
        struct sentence
        {
            public static int sentences;
            public static List<string>text = new List<string>();                              
            public static List<string> sentencetype = new List<string>();
            public static List<string> stateform = new List<string>();
            public static List<string> questionform = new List<string>();
        }
private void getsentences(string S)
        {
            
            string temp = "";
            sentence.sentences = 0;
            try {sentence.text.Clear(); sentence.sentencetype.Clear(); sentence.stateform.Clear(); sentence.questionform.Clear();}
            catch (Exception) { }; 
            while (S.Contains("  ")) S = S.Replace("  ", " ");
            for (int i = 0; i < S.Length; i++)
            {
                if (S[i] == ' ' && (char.IsLetter(S[i+1]) || char.IsPunctuation(S[i+1])))
                {
                    if (i == 0) i++;
                    else
                    {
                        if (!(char.IsLetter(S[i - 1]) && char.IsLetter(S[i + 1])))i++;
                    }
                }
                if (S[i] != '.' && S[i] != '!' && S[i] != '?')
                {
                    if (S[i] == '\n')
                        {if (S[i] != S.Length) i++;}
                    else temp += S[i];
                }
                else
                {
                    temp += S[i];
                    sentence.text.Add(temp);
                   
                    if (S[i] == '?') sentence.sentencetype.Add("question");
                    else if(S[i]=='.' || S[i]=='!') sentence.sentencetype.Add("state");
                    sentence.sentences++;
                    temp = "";
                }                
            }
string[] deny_substr = new string[] {"do not","don\'t","does not","doesn\'t","am not","'m not","have not","haven\'t","has not",
                    "hasn\'t","is not","isn\'t","are not","aren\'t","did not","didn\'t","were not","weren\'t","was not","wasn\'t","have not had","haven\'t had",
                    "has not had","hasn\'t had","had not had","hadn\'t had","will not have","won\'t have","will not","won\'t"};
            for (int j = 0; j < sentence.sentences; j++)
            {
                for (int k = 0; k < deny_substr.Length; k++)
                {
                    if (sentence.sentencetype[j] == "state")
                    {
                        if (sentence.text[j].Contains(deny_substr[k]))sentence.stateform.Add(" deny");
                        else sentence.stateform.Add(" pos");
                    }
                    else
                    {
                        if (sentence.text[j].Contains(deny_substr[k])) sentence.stateform.Add("quest_deny");
                        else sentence.stateform.Add("quest_pos");
                    }
                    // sefsef. do not  ?do  not !dsefef .awdwad? do not.  will not.will not ? efwef.
                    k = deny_substr.Length;
                }
 
                 targettxt.Text += j + 1 + ". " + sentence.text[j] + "-" + sentence.sentencetype[j] + "-" + sentence.stateform[j] + "\n";
            }
        }

Решение задачи: «Неправильное заполнение списка»

textual
Листинг программы
                bool containsAnyDenySubst = false;
                foreach (var s in denySubstr)
                {
                    containsAnyDenySubst |= Sentence.Text[j].Contains(s);
                }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.545 из 5