Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128

Подсчет гласных в строке. Подкорректировать код

12.01.2014, 18:15. Показов 2109. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Не получается вывести в сообщение кол-во гласных букв в строке. Вот код:
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
void __fastcall TForm1::Button2Click(TObject *Sender) {
    Memo1->Text = AnsiString("Поэтому, если Вы отправите через сокет файл")
    + "\r\nнапример, в 100 Кб, то ;" +
    "\r\nтому, кому Вы посылали этот блок, придет несколько " +
    "\r\nблоков с размерами, которые зависят";
if (Memo1->Lines->Count == 0)
        return;
    int str_length;
    int glas;
    char mas[10] = {
        'а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е'
    };
    AnsiString text;
    for (int i = 0; i < Memo1->Lines->Count; i++) {
        str_length = Memo1->Lines->Strings[i].Length();
        text += "Длина строки " + IntToStr(i + 1) + " равна " + IntToStr
            (str_length);
 
 
        for (int j = 0; j < str_length; j++)
            for (int g = 0; g < 9; g++)
                if (Memo1->Lines->Strings[i][j + 1] == mas[g])
                    glas++;
        text += ", количество гласных букв: " + IntToStr(glas) + "\n";
    }
    ShowMessage(text);
}
Почему то каждый раз выдает новую цифру.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.01.2014, 18:15
Ответы с готовыми решениями:

Подсчет количества гласных в строке
Хочу посчитать количество гласных в строке. Когда в строке ТОЛЬКО гласные, то нормально считает. Когда появляются несколько согласных то...

Подсчет количества гласных в строке
Given a string str (max length – 20 characters). Write a program for counting the number of vowels in the given string. Учитывая...

Подсчет гласных букв в строке
Нужно создать молчаливую функцию для подсчета гласных букв в строке, не могу разобраться в чем проблема, выводит undefine function words()...

20
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33406 / 21516 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
12.01.2014, 19:19
Переменная glas - локальная, ответственность за ее инициализацию лежит на программисте, а у тебя в коде этой инициализации нулем просто нет.
0
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128
12.01.2014, 19:29  [ТС]
Если инициализировать, glas=0;, то выдает просто 0.
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
void __fastcall TForm1::Button2Click(TObject *Sender) {
    if (Memo1->Lines->Count == 0)
        return;
 
    int str_length;
    int glas;
    char mas[10] = {
        'а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е'
    };
    AnsiString text;
    for (int i = 0; i < Memo1->Lines->Count; i++) {
        str_length = Memo1->Lines->Strings[i].Length();
        text += "Длина строки " + IntToStr(i + 1) + " равна " + IntToStr
            (str_length);
 
        glas = 0;
 
        for (int j = 0; j < str_length; j++)
            for (int g = 0; g < 9; g++)
                if (Memo1->Lines->Strings[i][j + 1] == mas[g])
                    glas++;
        text += ", количество гласных букв: " + IntToStr(glas) + "\n";
    }
 
    ShowMessage(text);
0
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
12.01.2014, 19:51
Ты обнуляешь в цикле (16-я строка, ее убери), а нужно при объявлении (6-я строка):
C++
1
int glas = 0;
0
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128
12.01.2014, 19:55  [ТС]
Да я ее блин, даже глобально объявлял! Результат тот же. Не хочет считать.
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
12.01.2014, 20:11
Цитата Сообщение от Oleg34 Посмотреть сообщение
Не хочет считать.
А может до 21 строки не доходит?

Посмотрите типы массива mas и Lines->Strings; должны быть одинаковы...
0
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128
12.01.2014, 20:25  [ТС]
До 21 строки доходит. А как определить тип Lines->Strings?
0
 Аватар для Aleator
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
12.01.2014, 20:39
AnsiString, так что меняйте тип массива mas, либо используйте функцию перевода char в AnsiString

Добавлено через 9 минут
или наоборот AnsiString в char
0
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128
12.01.2014, 20:53  [ТС]
Поменял тип массива mas:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button4Click(TObject *Sender) {
    if (Memo1->Lines->Count == 0)
        return;
    int str_length;
    int glas = 0;
 
    AnsiString text;
    AnsiString mas = "аеиоуыэюя";
    for (int i = 0; i < Memo1->Lines->Count; i++) {
        str_length = Memo1->Lines->Strings[i].Length();
        text += "Длина строки " + IntToStr(i + 1) + " равна " + IntToStr
            (str_length);
 
        for (int j = 0; j < str_length; j++)
            for (int g = 0; g < 9; g++)
                if (Memo1->Lines->Strings[i][j + 1] == mas[g])
                    glas++;
        text += ", количество гласных букв: " + IntToStr(glas) + "\n";
    }
    ShowMessage(text);
}
Вылетает с ошибкой. AnsiString в char не могу сообразить как
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33406 / 21516 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
12.01.2014, 21:21
C++
1
2
3
4
// ...
        for (int j = 0; j < str_length; j++)
            for (int g = 0; g < 9; g++)
                if (Memo1->Lines->Strings[i][j + 1] == mas[g + 1])
нормально показывает результат...

C++
1
2
3
// ...
        for (int j = 0; j < str_length; j++)
            if(mas.Pos(Memo1->Lines->Strings[i][j + 1]) > 0) glas++;
аналогично
0
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128
12.01.2014, 21:50  [ТС]
Не пойму, у меня все равно нули выводит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void __fastcall TForm1::Button5Click(TObject *Sender) {
    if (Memo1->Lines->Count == 0)
        return;
    AnsiString text;
    int str_length;
    int glas = 0;
    char mas[10] = {
        'а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е'
    };
    for (int i = 0; i < Memo1->Lines->Count; i++) {
        str_length = Memo1->Lines->Strings[i].Length();
        text += "Длина строки " + IntToStr(i + 1) + " равна " + IntToStr
            (str_length);
        for (int j = 0; j < str_length; j++)
            for (int g = 0; g < 9; g++)
                if (Memo1->Lines->Strings[i][j + 1] == mas[g + 1])
                    glas++;
        text += ", количество гласных букв: " + IntToStr(glas) + "\n";
    }
    ShowMessage(text);
}
И без разницы, что:
C++
1
2
3
    char mas[10] = {
        'а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е'
    };
что:
C++
1
    AnsiString mas = "аеиоуыэюя";
Добавлено через 13 минут
А если так:
C++
1
2
                if (mas.Pos(Memo1->Lines->Strings[i][j + 1]) > 0)
                    glas++;
то не реальные цифры получаются.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
12.01.2014, 23:27
Всё это нормально работает (если чуть подправить)__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    if (Memo1->Lines->Count == 0)
        return;
    AnsiString text;
    int str_length;
    int glas = 0;
    char mas[10] = {
        'à', 'ó', 'î', 'û', 'è', 'ý', 'ÿ', 'þ', '¸', 'å'
    };
    for (int i = 0; i < Memo1->Lines->Count; i++) {
        str_length = Memo1->Lines->Strings[i].Length();
        text += "Äëèíà ñòðîêè " + IntToStr(i + 1) + " ðàâíà " + IntToStr
            (str_length);
        for (int j = 0; j < str_length; j++)
            for (int g = 0; g < 10; g++)
                if (Memo1->Lines->Strings[i][j + 1] == mas[g])
                    glas++;
        text += ", êîëè÷åñòâî ãëàñíûõ áóêâ: " + IntToStr(glas) + "\n";
        glas=0;
    }
    ShowMessage(text);
По крайней мере на BCB5. Если не раьотает - это "от лукавого" (из-за юникода другими словами)...
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33406 / 21516 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
12.01.2014, 23:33
Вот те варианты, которые я привел - именно на Юникодной версии и проверялись, так что тут тоже проблем никаких...
1
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
12.01.2014, 23:33
Про обнуление я ранее неправильно написал, у ТС верно было.
Вот рабочий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  Memo1->Text = AnsiString("Поэтому, если Вы отправите через сокет файл")
  + "\r\nнапример, в 100 Кб, то ;" +
  "\r\nтому, кому Вы посылали этот блок, придет несколько " +
  "\r\nблоков с размерами, которые зависят";
  if (Memo1->Lines->Count == 0)
    return;
  AnsiString text;
  int str_length;
  int glas;
  AnsiString mas = "аеёиоуыэюяАЕЁИОУЫЭЮЯ";
  for (int i = 0; i < Memo1->Lines->Count; i++)
  {
    glas = 0;
    str_length = Memo1->Lines->Strings[i].Length();
    text += "Длина строки " + IntToStr(i + 1) + " равна " + IntToStr(str_length);
    for (int j = 0; j < str_length; j++)
      for (int g = 1; g <= mas.Length(); g++)
        if (Memo1->Lines->Strings[i][j+1] == mas[g])
          glas++;
    text += ", количество гласных букв: " + IntToStr(glas) + "\n";
  }
  ShowMessage(text);
Миниатюры
Подсчет гласных в строке. Подкорректировать код  
1
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128
13.01.2014, 00:14  [ТС]
У меня RAD Studio 2010. Хрень какая то. Все равно нули! Что то подключить может нужно? Целый день бьюсь, уже голова не варит. Если не трудно проект архивом киньте пожалуйста!
Миниатюры
Подсчет гласных в строке. Подкорректировать код  
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
13.01.2014, 00:30
..проверить код не могу, поэтому чисто интуитивно: попробуйте вставить wchar_t:
C++
1
if ((wchar_t)Memo1->Lines->Strings[i][j + 1] == (wchar_t)mas[g]) glas++;
в последнем анализе; возможно достаточно только с одной стороны... .
1
1 / 1 / 1
Регистрация: 22.12.2010
Сообщений: 128
13.01.2014, 00:39  [ТС]
Блин, к сожалению, то же самое.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33406 / 21516 / 8236
Регистрация: 22.10.2011
Сообщений: 36,917
Записей в блоге: 12
13.01.2014, 00:54
XE2 (от 2010 не должно отличаться, если TCHAR maps to выставлено в wchar_t):
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
void __fastcall TForm1::Button16Click(TObject *Sender)
{
    Memo1->Text = String(L"Поэтому, если Вы отправите через сокет файл") +
        L"\r\nнапример, в 100 Кб, то ;" +
        L"\r\nтому, кому Вы посылали этот блок, придет несколько " +
        L"\r\nблоков с размерами, которые зависят";
 
    if (Memo1->Lines->Count == 0)
        return;
    int str_length;
    int glas;
 
    String text = L"";
    String mas = L"аеиоуыэюя";
    for (int i = 0; i < Memo1->Lines->Count; i++)
    {
        str_length = Memo1->Lines->Strings[i].Length();
        text += L"Длина строки " + IntToStr(i + 1) + L" равна " +
            IntToStr(str_length);
 
        for (int j = glas = 0; j < str_length; j++)
            if (mas.Pos(Memo1->Lines->Strings[i][j + 1]) > 0)
                glas++;
        text += L", количество гласных букв: " + IntToStr(glas) + L"\n";
    }
    ShowMessage(text);
}
1
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,023
13.01.2014, 01:39
В моем случае ничего дополнительно не подключал, кинул на форму кнопку и мемо, добавил код.
Builder 2007.
В новых версиях, возможно, могут потребоваться манипуляции, предложенные, к примеру, UI.
1
+1
345 / 178 / 53
Регистрация: 24.08.2010
Сообщений: 1,028
13.01.2014, 03:51
А почему бы не поставить остановку в коде и не проверить переменные, чтобы не копаться в потемках?
Миниатюры
Подсчет гласных в строке. Подкорректировать код  
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.01.2014, 03:51
Помогаю со студенческими работами здесь

Подсчет количества гласных в строке
Помогите разобраться, программа подсчитывает количество гласных в каждой отдельной введенной пользователем строке. В первой строке...

Подсчет гласных и согласных букв в строке
Помогите пожалуйста. Нужно написать полностью программу(если не усложнит сильно дело, написать к каждому важному рядку объяснение): ...

Подсчет количества гласных букв в строке
Помогите решить задачу: написать программу подсчета гласных букв во веденном предложении.

Подсчет слов в строке, начинающихся с гласных / согласных букв
Уважаемые форумчане, здравствуйте, помогите, пожалуйста новичку в С++ с кодом для подсчета слов в строке, начинающихся с гласных, согласных...

Подсчет количества гласных и согласных (исправить код)
Ребят, помоги исправить код. Код написан в классах, суть кода(подсчитывает количество гласных и согласных), но выдаёт ошибки...кто может...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru