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

Как посчитать количество единиц в группах символов?

30.10.2016, 15:49. Показов 1871. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана строка, состоящая из групп нулей и единиц. Посчитать количество единиц в группах с нечетным количеством символов.
Т.е я хочу узнать, как посчитать кол-во единиц в этих вот группах. Группы отделяются пробелами.
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
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "string.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormActivate(TObject *Sender)
{
Form1->Edit1->SetFocus();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if (Key==13)
{
ListBox1->Clear();
int i,a=1,b=0;
String st = Edit1->Text;
for(i=2;i<st.Length()+1;i++)
  {
   if(st[i]=='0' && st[i-1]!=' ' || st[i]=='1' && st[i-1]!=' ')
   a++;
   else
     {
     if(a%2!=0)
        {
        if(st[i-a]=='1' || st[i-a]=='0')
 
         ListBox1->Items->Add(st.SubString(i-a,a)+"     Количество единиц:"+IntToStr(a));
         }
     else
        ListBox1->Items->Add(st.SubString(i-a,a)+"      Четное количество элементов");
        a=1;
        }
     }
if(a%2!=0)
        {
        if(st[i-a]=='1' || st[i-a]=='0')
 
         ListBox1->Items->Add(st.SubString(i-a,a)+"     Количество единиц:"+IntToStr(a));
         }
     else
        ListBox1->Items->Add(st.SubString(i-a,a)+"      Четное количество элементов");
        }
}
//---------------------------------------------------------------------------
Добавлено через 19 часов 57 минут
памагити
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2016, 15:49
Ответы с готовыми решениями:

В строке, состоящей из групп нулей и единиц, подсчитать количество единиц в группах с нечетным количеством символов.
В строке, состоящей из групп нулей и единиц, подсчитать количество единиц в группах с нечетным количеством символов. #include...

Подсчитать количество единиц в группах с нечетным количеством символов
Помогите с написание программы в Builder C++ в оконном режиме. Задание следующее :В строке, состоящей из групп нулей и единиц, подсчитать...

В строке, состоящей из групп нулей и единиц, подсчитать количество единиц в группах с нечетным количеством символов
Я сделал эту задач,ну попросили теперь сделать заменить все cout через puts,я попытался но у меня не так работает как надо,надеюсь...

11
31.10.2016, 11:40

Не по теме:

в одном слове - три ошибки, жееесть :)

0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
31.10.2016, 14:11
Примерно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  AnsiString data="101011 0110 0101 01000 101011 11001 01010 1010 100110";
  LPSTR ptr=data.c_str();
  int i=1; 
  int col=0; 
  while(true)
  {
    if(*ptr=='1')
      col++;
    else
    if(*ptr=='\0' || *ptr==' ')
    {
      Memo1->Lines->Add("Группа "+String(i)+" кол="+String(col));
      if(*ptr=='\0')
        break;
      i++;
      col=0;
    }
    ptr++;
  }
0
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 29
31.10.2016, 14:52  [ТС]
Цитата Сообщение от dstar Посмотреть сообщение
LPSTR ptr=data.c_str();
Можете объяснить что происходит в этой строке
Цитата Сообщение от dstar Посмотреть сообщение
if(*ptr=='1')
И что значит *
Спасибо
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
31.10.2016, 15:13
C++
1
LPSTR ptr=data.c_str();
Здесь, с помощью метода c_str мы получаем указатель на строку
В с++ указатели это основа, странно слышать от Вас такой вопрос. В данной реализации это разименовывание указателя. Т.е. имея указатель на массив символов мы получаем значение первого элемента. Так как значение указателя сдвигается в цикле на одну позицию, первым символом массива будет очередной символ строки. Если Вам будет понятнее, то данную строку можно записать следующим образом
C++
1
if(ptr[0]=='1')
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
31.10.2016, 19:02
Я бы использовал средства Билдера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
   String data= "101011 0110 0101 01000 101011 11001 01010 1010 100110";
   std::auto_ptr<TStringList> L(new TStringList); // Создаем объект класса "список строк", которые по окончании работы с ним удалится автоматически
   L->CommaText = data; // записываем исходные данные в свойство CommaText, это приведет к разбивке на слова (группы) по пробелам и запятым
   for(int i = 0; i < L->Count; i++) // проходим по всем группам символов
   {
      String group = L->Strings[i];
      if(group.Length() % 2) // если длина очередной группы НЕчетная (остаток от деления на 2 не равен 0)
      {
         // то заменяем в этой группе все 0 на пустую строку, и в результате получаем строку,
         // состоящую только из единиц, длину которой и выводим.
         Memo1->Lines->Add(String().sprintf(_T("Количество 1-ц в %s = %d"), group, StringReplace(group, "0", "", TReplaceFlags() << rfReplaceAll).Length()));
      }
   }
0
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 29
31.10.2016, 19:13  [ТС]
объясните, если не сложно что происходит в строках, ибо я чайник и еще много из этого не знаю.
Цитата Сообщение от volvo Посмотреть сообщение
String data= "101011 0110 0101 01000 101011 11001 01010 1010 100110";
* *std::auto_ptr<TStringList> L(new TStringList);
* *L->CommaText = data;
* *for(int i = 0; i < L->Count; i++)
* *{
* * * String group = L->Strings[i];
* * * if(group.Length() % 2)
* * * {
* * * * *Memo1->Lines->Add(String().sprintf(_T("Количество 1-ц в %s = %d"), group, StringReplace(group, "0", "", TReplaceFlags() << rfReplaceAll).Length()));
* * * }
* *}
0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
31.10.2016, 19:21
Я бы использовал средства Билдера:
Оригинальное решение, и да, мое решение было не полным. Не учел нечетность групп
if(group.Length() % 2)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
31.10.2016, 19:21
Добавил комментарии выше
0
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 29
03.11.2016, 11:57  [ТС]
Спасибо большое. А есть ли еще какие-то способы написания этой программы ибо я чайник и пытался понять что значение и то как работают все эти операции, но не понял многое.

Добавлено через 1 час 43 минуты
или хотя бы вывод организовать как-нибудь иначе

Добавлено через 14 часов 15 минут
в общем немного модернизировал ваш код и получил желаемый результат
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
if(Key==13)
        {
using namespace std;
      ListBox1->Clear();
      String st = Edit1->Text;
   auto_ptr<TStringList> L(new TStringList);                                                                    // Создаем объект класса "список строк", которые по окончании работы с ним удалится автоматически
   L->CommaText = st;                                                                                            // записываем исходные данные в свойство CommaText, это приведет к разбивке на слова (группы) по пробелам и запятым
   for(int i = 0; i < L->Count; i++)
   {
   int a=0,b=0;
      String group = L->Strings[i];
      if(group.Length() % 2!=0)
      {
       for(int j=1; j<=group.Length();j++)
       {
       if(group[j]=='1')
       {
       a++;
       }
       if(group[j]=='0')
       {
       b++;
       }
       }
       ListBox1->Items->Add(group+" Количество единиц в группе: "+ IntToStr(a));
      }
   }
   }
Спасибо большое за помощь.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
03.11.2016, 12:11
Лучший ответ Сообщение было отмечено Foresto как решение

Решение

Лучше б я этот код не писал, если б знал, что ты его так изуродуешь. А потом ты скажешь, что тебе помогли на этом форуме, и больше сюда никто не придет, все смеяться будут с такого кода. Забери свое спасибо себе обратно...

Не по теме:

Foresto добавлен в игнор-лист, чтобы больше код не написать даже случайно

0
188 / 41 / 12
Регистрация: 22.02.2016
Сообщений: 149
03.11.2016, 22:53
Цитата Сообщение от volvo Посмотреть сообщение
Лучше б я этот код не писал, если б знал, что ты его так изуродуешь
Можно поинтересоваться чем он его изуродовал? Тем что в цикле подсчитал количество единиц? Подсчет нулей там конечно лишний, но не знай он функции StringReplace - вполне нормальное решение. А то что Вы в коментах пишите - Вас совсем не красит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.11.2016, 22:53
Помогаю со студенческими работами здесь

Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов.
Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в группах с нечетным количеством символов.

Строки: посчитать колличество единиц в группах с нечетным колличеством символов
Дана строка состоящая из групп нулей и единиц. Например {111 000001 1101010 10100010 11100} Необходимо посчитать колличество единиц в...

Посчитать количество нулей и единиц в группах строки
Требуется помощь. Дана строка, состоящая из групп нулей и единиц. Каждая группа отделяется от другой одним или несколькими пробелами....

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

Подсчитать количество единиц в группах с нечетным количеством символов
Помогите пожалуйста с задачкой! Заранее спасибо всем! Дана строка, состоящая из групп нулей и единиц. Подсчитать количество единиц в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
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