Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21

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

17.03.2015, 21:08. Показов 637. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Есть структура списков. есть функция. Функция изначально заменяет двойные пробелы одинарными и убирает другие лишние пробелы, далее делит текст на предложения. Каждое предложение записывает в список 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

подскажите в чем моя ошибка, кому не трудно.


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
        
        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";
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.03.2015, 21:08
Ответы с готовыми решениями:

Неправильное заполнение Treeview
Народ, всем привет. Такая проблемка: у меня заполняется Treeview вроде бы корректно, шапка, а под ней два &quot;ребенка&quot; элемента ...

Заполнение списка
У меня возникла проблема с списком, само задание: надо с клавиатуры заполнить список интовыми значениями, найти сумму простых чисел(числа...

Заполнение списка
ДОбрый день. Необходимо заполнить List данными из datagridview, я заполняю классом. класс: public class field { ...

7
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21
20.03.2015, 22:57  [ТС]
Решил самым простым способом.Выглядит правда не але.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
            for (int j = 0; j < sentence.sentences; j++)
            {
 
                if (sentence.sentencetype[j] == "state")
                {
                    if (sentence.text[j].Contains("do not") || sentence.text[j].Contains("don\'t") || sentence.text[j].Contains("does not") ||
                        sentence.text[j].Contains("doesn\'t") || sentence.text[j].Contains("am not") || sentence.text[j].Contains("'m not") || 
                        sentence.text[j].Contains("have not") || sentence.text[j].Contains("haven\'t") || sentence.text[j].Contains("has not") ||
                        sentence.text[j].Contains("hasn\'t") || sentence.text[j].Contains("is not") || sentence.text[j].Contains("isn\'t") ||
                        sentence.text[j].Contains("are not") || sentence.text[j].Contains("aren\'t") || sentence.text[j].Contains("did not") ||
                        sentence.text[j].Contains("didn\'t") || sentence.text[j].Contains("were not") || sentence.text[j].Contains("weren\'t") ||
                        sentence.text[j].Contains("was not") || sentence.text[j].Contains("wasn\'t") || sentence.text[j].Contains("have not had") ||
                        sentence.text[j].Contains("haven\'t had") || sentence.text[j].Contains("has not had") || sentence.text[j].Contains("hasn\'t had") ||
                        sentence.text[j].Contains("had not had") || sentence.text[j].Contains("hadn\'t had") || sentence.text[j].Contains("will not have") ||
                        sentence.text[j].Contains("won\'t have") || sentence.text[j].Contains("will not") || sentence.text[j].Contains("won\'t"))
                                sentence.sentenceform.Add(" deny");
                    else sentence.sentenceform.Add(" pos");
                }
                else
                {
                    if (sentence.text[j].Contains("do not") || sentence.text[j].Contains("don\'t") || sentence.text[j].Contains("does not") ||
                        sentence.text[j].Contains("doesn\'t") || sentence.text[j].Contains("am not") || sentence.text[j].Contains("'m not") ||
                        sentence.text[j].Contains("have not") || sentence.text[j].Contains("haven\'t") || sentence.text[j].Contains("has not") ||
                        sentence.text[j].Contains("hasn\'t") || sentence.text[j].Contains("is not") || sentence.text[j].Contains("isn\'t") ||
                        sentence.text[j].Contains("are not") || sentence.text[j].Contains("aren\'t") || sentence.text[j].Contains("did not") ||
                        sentence.text[j].Contains("didn\'t") || sentence.text[j].Contains("were not") || sentence.text[j].Contains("weren\'t") || 
                        sentence.text[j].Contains("was not") || sentence.text[j].Contains("wasn\'t") || sentence.text[j].Contains("have not had") ||
                        sentence.text[j].Contains("haven\'t had") || sentence.text[j].Contains("has not had") || sentence.text[j].Contains("hasn\'t had") ||
                        sentence.text[j].Contains("had not had") || sentence.text[j].Contains("hadn\'t had") || sentence.text[j].Contains("will not have") ||
                        sentence.text[j].Contains("won\'t have") || sentence.text[j].Contains("will not") || sentence.text[j].Contains("won\'t")) 
                                sentence.sentenceform.Add("quest_deny");
                    else sentence.sentenceform.Add("quest_pos");
                }
                //targettxt.Text += j + 1 + ". " + sentence.text[j] + "-" + sentence.sentencetype[j] + "-" + sentence.sentenceform[j] + "\n";
            }                // sefsef. do not  ?do  not !dsefef .awdwad? do not.  will not.will not ? efwef.
        }
а вообще проблема была в том, что в каждом предложении проверялось наличие каждой подстроки и при каждом не-на\хождении в список добавлялась запись. также пробовал через дополнительный массив булев решить эту задачу, но не вышло. еще пробовал в цикле после добавления всех записей в список удалять лишние и по индексу и пачками, но студия ругалась на индекс списка
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
21.03.2015, 09:45
sky49rus,
Попробуйте
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
            string[] denySubstr =
            {
                "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 (var j = 0; j < sentence.sentences; j++)
            {
                bool containsAnyDenySubst = denySubstr.Any(s => sentence.text[j].Contains(s));
 
                if (sentence.sentencetype[j] == "state")
                {
                    if (containsAnyDenySubst)
                    {
                        sentence.stateform.Add(" deny");
                    }
                    else
                    {
                        sentence.stateform.Add(" pos");
                    }
                }
                else
                {
                    if (containsAnyDenySubst)
                    {
                        sentence.stateform.Add("quest_deny");
                    }
                    else
                    {
                        sentence.stateform.Add("quest_pos");
                    }
                }
            }
И в таком случае необходимо использовать класс, а не структуру

В результате, как-то так вышло
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
    class Sentence
    {
        public static int Sentences { get; set; }
 
        public static List<string> QuestionForm { get; set; }
 
        public static List<string> StateForm { get; set; }
 
        public static List<string> SentenceType { get; set; }
 
        public static List<string> Text { get; set; }
        
        static Sentence()
        {
            QuestionForm = new List<string>();
            StateForm = new List<string>();
            SentenceType = new List<string>();
            Text = new List<string>();
        }
        
        public string this[int idx]
        {
            get { return Text[idx]; }
            set { Text[idx] = value; }
        }
    }
 
    class Program
    {
        public static void Main(string[] args)
        {
            string[] denySubstr =
            {
                "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 (var j = 0; j < Sentence.Sentences; j++)
            {
                bool containsAnyDenySubst = denySubstr.Any(s => Sentence.Text[j].Contains(s));
 
                if (Sentence.SentenceType[j] == "state")
                {
                    if (containsAnyDenySubst)
                    {
                        Sentence.StateForm.Add(" deny");
                    }
                    else
                    {
                        Sentence.StateForm.Add(" pos");
                    }
                }
                else
                {
                    if (containsAnyDenySubst)
                    {
                        Sentence.StateForm.Add("quest_deny");
                    }
                    else
                    {
                        Sentence.StateForm.Add("quest_pos");
                    }
                }
            }
        }
    }
1
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21
21.03.2015, 12:04  [ТС]
Спасибо, отлично работает. Если не сложно поясни вот эту часть:
C#
1
bool containsAnyDenySubst = denySubstr.Any(s => Sentence.Text[j].Contains(s));
Понятно что в дальнейшем в цикле проверяется значение containsAndenySubst. Не очень понял откуда взялась s. Это ведь не та же S которую получает функция.
Вот эта строка в принципе и с int работает.
C#
1
for (var j = 0; j < Sentence.Sentences; j++)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.03.2015, 12:51
sky49rus, входная строка как выглядит полностью?

Вижу, что задача решена, но можно сделать много проще. Мне интересно
0
0 / 0 / 0
Регистрация: 16.03.2015
Сообщений: 21
21.03.2015, 13:09  [ТС]
Входная строка - текст на русском или иностранном языке (сам язык определяется позже в другой функции. В этой только считаем предложения, заполняем ими список и определяем их тип). Естественно, будут и знаки препинания. Возможно, что текст на русском будет содержать несколько слов или символов из другого языка.
state или question- тип предложения (повествовательное и вопросительное). Определяются в начале функции вот этим кодом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
string temp = "";
            Sentence.Sentences = 0;
            try {Sentence.Text.Clear(); Sentence.Sentencetype.Clear(); Sentence.Sentenceform.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 = "";
                }                
            }
Здесь мы сначала заменяем все двойные пробелы на одинарные. Далее посимвольно считываем входную строку:
пропускаем все лишние пробелы
пропускаем символ перехода на новую строку
если текущий символ = !. или ? добавляем его к отобранной строке, определяем тип предложения и записываем определенный тип предложения в список
записываем предложения в список Sentence.Text
увеличиваем счетчик предложений
очищаем временную строку.


как то так. Извините, я фигово объясняю)))))
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.03.2015, 15:03
Ну примерно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using System;
using System.Linq;
using System.Text.RegularExpressions;
 
class Program
{
    static readonly string[] denySubstr =
            {
                "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"
            };
    static readonly Regex DenyRegex = new Regex(string.Join("|", denySubstr.Select(x => "(" + x + ")")));
    public static void Main(string[] args)
    {
        string str = @"I hope somebody can help me with this simple issue I'm having, but can't figure it out.
 
I was using Ajax calls in javascript to submit my forms which was no problem.
 
I'm trying now to use the htmlbeginform helper, but it is not hitting the post method inside the same controller that I was using for the Ajax call.
 
What do I need to do in order for the post method to be hit?";
 
 
 
        string pattern = @".+?((\.(\.\.)?)|[!?])|(.$)";
 
        var phrases = Regex.Matches(str, pattern);
 
        foreach (Match match in phrases)
        {
            Console.WriteLine("{0} -{1}", match.Value, DetermineType(match.Value));
            Console.WriteLine();
        }
    }
 
    private static string DetermineType(string value)
    {
        bool containsAnyDenySubst = DenyRegex.IsMatch(value);
        bool isQuestion = value[value.Length - 1] == '?';
        string firstPart = isQuestion ? "question" : "state";
        string secondPart = isQuestion ? containsAnyDenySubst ? "quest_deny" : "quest_pos" : "pos";
        return firstPart + '-' + secondPart;
    }
}
0
871 / 721 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
21.03.2015, 17:46
sky49rus,

C#
1
bool containsAnyDenySubst = denySubstr.Any(s => Sentence.Text[j].Contains(s));
Если записывать по аналогии, то это можно записать или так
C#
1
2
3
4
5
6
7
8
9
bool containsAnyDenySubst = false;
                foreach (var s in denySubstr)
                {
                    if (Sentence.Text[j].Contains(s))
                    {
                        containsAnyDenySubst = true;
                        break;
                    }
                }
или вот так
C#
1
2
3
4
5
                bool containsAnyDenySubst = false;
                foreach (var s in denySubstr)
                {
                    containsAnyDenySubst |= Sentence.Text[j].Contains(s);
                }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.03.2015, 17:46
Помогаю со студенческими работами здесь

Заполнение выпадающего списка
Доброго времени суток. Как можно выделить нужную строку через webbrowser из выпадающего списка как скажем тут http://www.avito.ru/additem...

Заполнение списка List
Добрый день. У меня такая проблема, мне нужно создать коллекцию типа: 1 ключ -&gt; несколько значений, для это выбрал Dictionary&lt;int,...

Странное заполнение списка
Здравствуйте. Написал я вот такой код, он создает массив строк и список, который эти массивы строк будет содержать. SQL запросом получаю...

Заполнение выпадающего списка
Добрый вечер! нужно на сайте выбрать пункт из выпадающего списка &lt;select name=&quot;pass_centre_id&quot;...

Заполнение выпадающего списка
Привет!Помогите заполнить список.В общем получается так На форме есть комбобокс.Есть txt файл в котором записаны параметры фильма(ну у меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru