Неправильное заполнение списка - 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); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д