Неправильное заполнение списка - 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);
}