Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2010, 18:06   #1
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию [C#] Удаление блочных комментариев

Здравствуйте вот у меня возникла проблема во второй текстбох мне выводит System.Char[] заместо нужного результата
Код:
        {
            string szStr1;
            int iIndex1, iIndex2, iCount;
            szStr1 = richTextBox1.Text;
            int iLen = szStr1.Length;
            char[] szStr = szStr1.ToCharArray();
            for (iIndex1 = iIndex2 = iCount = 0; szStr[iIndex1] < iLen; iIndex1++)
            {
                if ( szStr[iIndex1] == '*' && szStr[iIndex1 + 1]=='/' ) { iCount--; iIndex1++; continue; }
                if (szStr[iIndex1] == '/' && szStr[iIndex1 + 1] == '*') { iCount++; iIndex1++; continue; }
			    if ( iCount == 0) szStr[iIndex2++] = szStr[iIndex1];
            }
            szStr[iIndex2] = '\0';
            richTextBox2.Text = Convert.ToString(szStr);
        }
AquaticSoul вне форума Ответить с цитированием
Старый 10.11.2010, 19:12   #2
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Что-то символ \0 мутит не то в коде. После него никакой текст вообще не выводится.
Код:
       private void button1_Click(object sender, EventArgs e)
        {
            string szStr1;
            int iIndex1, iIndex2, iCount;
            szStr1 = richTextBox1.Text;
            int iLen = szStr1.Length;
            char[] szStr = szStr1.ToCharArray();
            for (iIndex1 = iIndex2 = iCount = 0; szStr[iIndex1] < iLen; iIndex1++)
            {
                if (szStr[iIndex1] == '*' && szStr[iIndex1 + 1] == '/') { iCount--; iIndex1++; continue; }
                if (szStr[iIndex1] == '/' && szStr[iIndex1 + 1] == '*') { iCount++; iIndex1++; continue; }
                if (iCount == 0) szStr[iIndex2++] = szStr[iIndex1];
            }
            //szStr[iIndex2] = '\0';  //!!!Из-за этой строки вообще не выводится текст!!!
            richTextBox2.Text = new String(szStr);
        }

Последний раз редактировалось Casper-SC; 10.11.2010 в 19:40.
Casper-SC вне форума Ответить с цитированием
Старый 10.11.2010, 19:52   #3
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

Ну так эта строка должна убирать всё что между коментариями "/*" "*/"
без нее он не убирает этого
AquaticSoul вне форума Ответить с цитированием
Старый 10.11.2010, 20:00   #4
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Цитата:
Сообщение от AquaticSoul Посмотреть сообщение
Ну так эта строка должна убирать всё что между коментариями "/*" "*/"
без нее он не убирает этого
Ну так, как мне показалось эта строка вообще или убирает весь текст или каким-то образом не даёт его отбразить. Проблемы была, что выводится не результат, а System.Char[]. Эта проблема решена. А удалять видимо как-то надо по другому.


Код:
richTextBox2.Text = new String(szStr);
Casper-SC вне форума Ответить с цитированием
Старый 10.11.2010, 20:19   #5
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

так да систем чар не выводится но без этой строки весь код бессмысла)
AquaticSoul вне форума Ответить с цитированием
Старый 10.11.2010, 20:39   #6
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Или я что-то намутил (вроде ничего не трогал), но цикл вообще не срабатывает. Тупо программа сразу обходит цикл, так как условие сразу такое, кторое прерывает цикл. И сразу программа получает этот самый символ. Запустите в режиме отладки посмотрите, что делает программа по шагам.

------------------------- Update -------------------------

for (iIndex1 = iIndex2 = iCount = 0; iIndex1 < iLen; iIndex1++)

Вот лови:
Код:
        private void button1_Click(object sender, EventArgs e)
        {
            string szStr1;
            int iIndex1, iIndex2, iCount;
            szStr1 = richTextBox1.Text;
            int iLen = szStr1.Length;
            char[] szStr = szStr1.ToCharArray();
            for (iIndex1 = iIndex2 = iCount = 0; iIndex1 < iLen; iIndex1++)
            {
                if (szStr[iIndex1] == '*' && szStr[iIndex1 + 1] == '/')
                {
                    iCount--; iIndex1++; continue;
                }

                if (szStr[iIndex1] == '/' && szStr[iIndex1 + 1] == '*')
                {
                    iCount++; iIndex1++; continue;
                }

                if (iCount == 0) szStr[iIndex2++] = szStr[iIndex1];
                
            }

            szStr[iIndex2] = '\0';
            richTextBox2.Text = new String(szStr);
        }

Последний раз редактировалось Casper-SC; 10.11.2010 в 20:44. Причина: А всё, понял в чём беда.
Casper-SC вне форума Ответить с цитированием
Старый 10.11.2010, 20:53   #7
AquaticSoul
Нубик в С++
Пользователь
 
Аватар для AquaticSoul
 
Регистрация: 15.12.2009
Сообщений: 42
По умолчанию

А да я забыл исправить это, моё упущение)
Вроде работает)
AquaticSoul вне форума Ответить с цитированием
Старый 10.11.2010, 21:01   #8
Casper-SC
Форумчанин
 
Регистрация: 04.07.2007
Сообщений: 549
По умолчанию

Вот как тестил я (это я к тому, что предыдущее сообщение сначала содержало примерно следующее: "Опять не работает"):


А вот если взять кусок реального кода с "{ }" то и в правду не работает. Ну тут скорее всего надо переработать алгоритм
А нет. Если нету в коде вообще комментариев, тогда происходит выход за пределы массива

Последний раз редактировалось Casper-SC; 10.11.2010 в 21:16.
Casper-SC вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виджет комментариев vkontakte kpachbiu JavaScript, Ajax 8 17.01.2011 18:04
Работа комментариев в WordPress amdbodia WordPress и другие CMS 3 25.09.2010 15:09
Компиляция комментариев, невозможность отладки (F7) Alex Cones Общие вопросы Delphi 4 24.11.2009 18:55
Добавление комментариев Amen PHP 9 20.10.2009 19:34
ассемблер программу выводящую в файл количество блочных драйверов (assembler) valys361 Помощь студентам 2 05.06.2009 22:24