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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2011, 20:58   #1
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию Работа со строками в С++

Помогите написать программу.
Дана последовательность символов (строка). Определить наибольшее количество повторений одной цифры.
terredis вне форума Ответить с цитированием
Старый 07.12.2011, 23:30   #2
nick42
Форумчанин
 
Аватар для nick42
 
Регистрация: 14.10.2011
Сообщений: 267
По умолчанию

- а какие трудности?
Код:
   AnsiString tekst = "To be, or not to be...";
   char maska[10] = {  '0','1','2','3','4','5','6','7','8','9'  } ;
   int repit[10] = { 0,0,0,0,0,0,0,0,0,0 };
   for(int i=1;i<=tekst.Length();i++)
      for(int j=0;j<10;j++) 
         if(tekst[i]==maska[j]) repit[j]++;
... ну и так далее
nick42 вне форума Ответить с цитированием
Старый 08.12.2011, 00:11   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

terredis

Определить наибольшее количество повторений одной цифры.

Код:
std::locale::global(std::locale(""));

std::string s = "...";
unsigned d[10] = {0};

bool hasDigit = false;
for (std::string::const_iterator it = s.begin(); it != s.end(); ++it)
{
	if (std::isdigit(*it, std::locale()))
		++d[*it - '0'], hasDigit = true;
}

if (hasDigit)
	std::cout << std::distance(d, std::max_element(d, d+10)) << std::endl;
Rififi вне форума Ответить с цитированием
Старый 13.12.2011, 16:03   #4
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Написал код.
вот:
AnsiString s=Edit1->Text;
int a[10]={0,0,0,0,0,0,0,0,0,0};
for(int i=1; i<=a.Length();i++)
if ((s[i]>="0") && (s[i]<="9"))
{
int k=StrToInt(s[i]);
a[k]=a[k]+1;
}
int imax=0;
for(int i=1; i<10;i++)
if (a[i]>a[imax])
imax=i;
if (a[imax]==0)
Edit2->Text="öèôð íåò";
else
Edit2->Text="öèôðà "+IntToStr(imax)+"âñòðå÷àåòñÿ"+IntT oStr(a[imax]);
но выдаёт ошибку structure required on left side.of.
в чем проблема?
terredis вне форума Ответить с цитированием
Старый 14.12.2011, 22:14   #5
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

кто-нибудь может разъяснить суть это ошибки?
structure required on left side.of.
terredis вне форума Ответить с цитированием
Старый 14.12.2011, 23:24   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

выдает где? на какой строке вашего кода?(так же код лучше приводить полностью обработчиком(предположительно обработчик нажатия Button))
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.12.2011, 23:53   #7
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

ошибку выдаёт при компиляции.
вот здесь for(int i=1; i<=a.Length();i++)
terredis вне форума Ответить с цитированием
Старый 15.12.2011, 00:02   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

не припомню чтоб массивы в билдере были чем то особенным.
итого получаем.
Код:
AnsiString s=Edit1->Text;
int a[10]={0,0,0,0,0,0,0,0,0,0};
for(int i=0; i<10;i++)//индексация массива идет от 0 до 9.
    if ((s[i]>="0") && (s[i]<="9"))
    {
        int k=StrToInt(s[i]);
        a[k]=a[k]+1;
    }
int imax=0;
for(int i=0; i<10;i++)
    if (a[i]>a[imax])
        imax=i;
if (a[imax]==0)
    Edit2->Text="öèôð íåò";
else
    Edit2->Text="öèôðà "+IntToStr(imax)+"âñòðå÷àåòñÿ"+IntT oStr(a[imax]);
и правда такой код читать удобнее?)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.12.2011, 00:22   #9
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Спасибо.
Теперь буду юзать CODE)
terredis вне форума Ответить с цитированием
Старый 17.12.2011, 23:11   #10
terredis
Пользователь
 
Регистрация: 07.12.2011
Сообщений: 32
По умолчанию

Код:
AnsiString s=Edit1->Text;
int a[10]={0,0,0,0,0,0,0,0,0,0};
for(int i=0; i<10;i++)//индексация массива идет от 0 до 9.
    if ((s[i]>="0") && (s[i]<="9")) в этой строке выдаёт ошибку: E2034 Cannot convert 'char' to 'char *'
    {
        int k=StrToInt(s[i]);
        a[k]=a[k]+1;
    }
int imax=0;
for(int i=0; i<10;i++)
    if (a[i]>a[imax])
        imax=i;
if (a[imax]==0)
 Edit2->Text="цифр нет";
 else
 Edit2->Text="цифра "+IntToStr(imax)+"встречается"+IntToStr(a[imax]);
terredis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа со строками 3 Fuckoff Помощь студентам 0 18.04.2011 21:40
работа со строками CHOSEN1 Помощь студентам 2 23.12.2010 15:00
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
работа со строками. Женечка92 Помощь студентам 1 26.04.2010 21:00
Работа со строками в С++ Sien Помощь студентам 3 09.01.2009 20:02