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

Перевернуть все числа в строке

01.02.2015, 12:20. Показов 3919. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Рылся в поиске - не нашел.
К примеру есть:
String s = "bnbmnv3657bkbkf 567hjg460379 hjgk"
Необходимо перевернуть задом на перед все числа, встречающиеся в строке.
То есть, что бы стало:
String s = "bnbmnv7563bkbkf 765hjg973064 hjgk"
Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2015, 12:20
Ответы с готовыми решениями:

Задача по STL (В строке текста, все числа, встречающиеся перевернуть, оставив на месте)
В строке текста, все числа, встречающиеся перевернуть, оставив на месте.

Все 2-х и n-значные числа перевернуть и подсчитать сумму элементов в каждой нечётной строке
как решить такую задачу? Все 2-х и n-значные числа перевернуть и подсчитать сумму элементов в каждой нечётной строке.

Найти количество простых чисел в массиве. Перевернуть все нечетные строки матрицы. Перевернуть каждое четное слово в строке
Ребята помогите разобраться в коде программы, написав подробные комменты к данной проге. Спасибо! Постановка задачи 1. Используя...

28
59 / 59 / 19
Регистрация: 13.07.2009
Сообщений: 184
01.02.2015, 14:10
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
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
int i,j,k;
string s1;
string s = "bnbmnv3657bkbkf 567hjg460379 hjgk";
 
s1=s;
i=0;
while(i<s.length())
{
  if (!isdigit(s[i]))
  {
    s1[i]=s[i];
    i++;
    continue;
  }
  else
  {
    j=i;
    while (isdigit(s[i]))
      i++;
    for(k=j;k<i;k++)
      s1[k]=s[i-1-(k-j)];
  }
}
cout<<s1;
return 0;
}
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
01.02.2015, 14:53
Builder XE+
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <System.RegularExpressions.hpp>
#include <memory>
 
String __fastcall TForm1::DoReplace(const TMatch &Match)
{
    TMatch m(Match);
    return ReverseString(m.Value);
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    String s = "bnbmnv3657bkbkf 567hjg460379 hjgk";
 
    std::auto_ptr<TRegEx> re(new TRegEx("\\d+"));
    TMatchEvaluator eval = &DoReplace;
    ShowMessage(re->Replace(s, eval));
}
3
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
01.02.2015, 17:06  [ТС]
Спасибо.
Но ошибка: не находит System.RegularExpressions.hpp
без него ошибка:'auto_ptr' is not a member of 'std'

Добавлено через 1 час 53 минуты
Цитата Сообщение от nworm Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
#include <iostream>
       #include <string> 
       using namespace std;
       int main()
        { int i,j,k; 
          string s1; 
          string s = "bnbmnv3657bkbkf 567hjg460379 hjgk";
          .............................................
Спасибо, но как это переложить с string на String воще запутался.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
01.02.2015, 17:14
Sergey_03, о каком таком String вы говорите? В каком заголовочном файле?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
01.02.2015, 17:37  [ТС]
У меня есть StringGrid
В нем, к примеру, во второй строке в ячеках с 0 по 33 есть данные bnbmnv3657bkbkf 567hjg460379 hjgk, в каждой ячейке по символу.
C++
1
2
3
String s;
for (int j = 0;j < 34; j++)
{s += StringGrid1->Cells[j][2];}
В итоге в строку s занесены данные "bnbmnv3657bkbkf 567hjg460379 hjgk"
и в этой строке мне нужно развернуть все числа.

p.s.
Итоговая задача -есть данные в ячейках. В каждой ячейке по символу. Символы могут быть на английском, арабском и цифры. Нужно разворачивать только арабский. Но при сортировке при наличие арабского разворачиваются и он, и числа. На вышеразбираемом примере надеюсь разобраться с остальными проблемами.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
01.02.2015, 19:14
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Символы могут быть на английском, арабском и цифры. Нужно разворачивать только арабский.
Так, что вам все таки нужно развернуть? :
числа составленные из цифр стоящих подряд
или
слова состоящие из арабских символов стоящих подряд?
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
01.02.2015, 19:56  [ТС]
Пример с числами возможно натолкнул бы на правильные мысли, но в идеале надо разворачивать слова, состоящие из арабских символов, стоящих подряд.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
01.02.2015, 20:21
Что то типа этого: ???
؀؁؂ءآأؤإئابةتثجحخد ۷ ۸ ۹ ۺ ۻ ۼ ۽ ۾ ۿ
Ну я даже не знаю...
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
01.02.2015, 20:38  [ТС]
Ну да, из таких. Арабский, Иврит - неважно. Я так понимаю это без разницы. С права на лево пишется и читается.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
01.02.2015, 21:15
Это нужно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button49Click(TObject *Sender)
{
    String s = L"hello 19292 world םלוכל 598595 םולש";
    String result = "";
 
    for (int i = 1; i <= s.Length();)
    {
        while (i <= s.Length() && (UpCase(s[i]) != s[i] || IsDigit(s[i]) || isspace(s[i]))) result += s[i++];
        String sub = "";
        while (i <= s.Length() && UpCase(s[i]) == s[i] && !isspace(s[i])) sub += s[i++];
        result += ReverseString(sub);
    }
 
    ShowMessage(result);
}
Миниатюры
Перевернуть все числа в строке  
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
01.02.2015, 21:45  [ТС]
Да, очень похоже, что то.
Но при компиляции ошибка
E2268 Call to undefined function 'IsDigit'
сверху что ли чегото не хватает?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
01.02.2015, 21:48
Не знаю, у меня в XE2 всего хватает. Ты бы хоть писал, какой версией Билдера пользуешься. Я про BCB6 даже слышать ничего не хочу. Сам с этим давно издохшим мамонтом разбирайся (можно попробовать заменить на isdigit, в крайнем случае).
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
01.02.2015, 21:54  [ТС]
CodeGear RAD Studio C++Builder 2009
0
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,013
02.02.2015, 00:08
Ну что мешает свою функцию написать при необходимости?
C++
1
2
3
4
5
6
7
bool MyIsDigit (char c)
{
  if (c >= '0' && c <= '9')
    return 1;
  else
    return 0;
}
Использование:
C++
1
2
  String s = "ab5rg";
  ShowMessage(int(MyIsDigit(s[3])));  // выдаст 1 (true)
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.02.2015, 17:57  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Не знаю, у меня в XE2 всего хватает.
Да, заменил на isdigit - заработало. Но слова в разных местах почему то.
И еще если несколько английские букв заглавных - их почему то тоже переворачивает. В чем может быть причина? С числами все ок.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33374 / 21499 / 8235
Регистрация: 22.10.2011
Сообщений: 36,894
Записей в блоге: 11
02.02.2015, 18:13
Лучший ответ Сообщение было отмечено Sergey_03 как решение

Решение

Цитата Сообщение от Sergey_03 Посмотреть сообщение
если английские буквы заглавные - их почему то тоже переворачивает. В чем может быть причина?
Подумай сам. У заглавной буквы UpCase(s[i]) == s[i] возвращает True. Чтобы работало корректно - нужно добавить еще условий:
C++
1
2
3
4
5
6
7
8
9
    String lc = s.LowerCase(), uc = s.UpperCase();
 
    for (int i = 1; i <= s.Length();)
    {
        while (i <= s.Length() && (uc[i] != s[i] || lc[i] != s[i] || IsDigit(s[i]) || isspace(s[i]))) result += s[i++];
        String sub = "";
        while (i <= s.Length() && uc[i] == s[i] && lc[i] == s[i] && !isspace(s[i])) sub += s[i++];
        result += ReverseString(sub);
    }
Больше править не буду. В конце концов, что за привычка - выдавливать по одному слову, и только тогда, когда что-то не работает? Такое ощущение, что рядом с тобой должны прямо с опахалом стоять, а ты только сидишь и на ошибки указываешь. Будет полностью задание - возможно будет помощь.
Цитата Сообщение от Sergey_03 Посмотреть сообщение
Но слова в разных местах почему то
Это к арабам. У них язык такой дебильный. С ивритом таких "в разных местах" нет. Где было слово - там же и его "разворот"...
1
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.02.2015, 18:59  [ТС]
Огромное спасибо!
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.02.2015, 21:05  [ТС]
Прошу прощения. Последний вопрос.
Просто я перед тем, как переворачивать строку String s в зависимости от условий, и отправить её в SG2, набиваю её из ячеек SG1 по 16 символов или по 32 (с 9 по 25 столбец , i и если есть i+1 строка), в зависимости от описания события. Как оно набивается понятно(опять же есть момент, если их две, из-за иврита, какую сначала отправить в String s) но для меня не совсем правильно. Опять же по причине наличия иврита или арабского. Может можно объеденить эти два действия в одно?
Ступенчато задавал вопросы - понять хотел, как все происходит поэтапно.
Кстати, признак второй строки в событие - наличие символа "-" в 0 столбце
Миниатюры
Перевернуть все числа в строке  
0
21 / 9 / 4
Регистрация: 15.12.2014
Сообщений: 663
02.02.2015, 22: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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
for(int i = StringGrid1->FixedRows; i < StringGrid1->RowCount; i++)
        {
            int i1;
            String s= "";
            String st1= " ";
            String st2= " ";
            if(StringGrid1->Rows[i+1]->Text.Pos("-"))
                 {
                    for (int i1 = 24; i1 >8; i1--)
                        {
                            st1 += StringGrid1->Cells[i1][i];
                        }
                    for (int i1 = 24; i1 >8; i1--)
                        {
                            st2 += StringGrid1->Cells[i1][i+1];
                        }
                 }
                    else
                 {
                    for (int i1 = 24; i1 >8; i1--)
                        {
                            st1 += StringGrid1->Cells[i1][i];
                        }
 
                 }
            s += st1;
            s += st2;
            String result = "";
            String lc = s.LowerCase(), uc = s.UpperCase();
            for (int i = 1; i <= s.Length();)
                {
                    while
                        (i <= s.Length() && uc[i] == s[i] && lc[i] == s[i] && !isspace(s[i]))
                        //(i <= s.Length() && (uc[i] != s[i] || lc[i] != s[i] || isdigit(s[i]) || isspace(s[i])))
                        result += s[i++];
                        String sub = "";
                    while
                        (i <= s.Length() && (uc[i] != s[i] || lc[i] != s[i] || isdigit(s[i]) || isspace(s[i])))
                        //(i <= s.Length() && uc[i] == s[i] && lc[i] == s[i] && !isspace(s[i]))
                        sub += s[i++];
                        result += ReverseString(sub);
                }
              StringGrid2->Cells[9][r5++] = result;
        }
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.02.2015, 22:15
Помогаю со студенческими работами здесь

Перевернуть в строке все слова
Нужна ваша помощь: Нужно составить следующую программу Перевернуть в строке все слова(Например &lt;&lt;Жили были дед да баба&gt;&gt;-...

Перевернуть все слова в строке
Структурированные типы данных (строковый тип) Ьтасипан уммаргорп адовереп йоннадаз икортс оп умещюуделс упицнирп.(

«Перевернуть» в строке все слова
14. «Перевернуть» в строке все слова (например, «Жили были дед и баба» - «илиЖ илыб дед и абаб»). люди жду вашей помощи,попадаю...

Перевернуть все слова в строке(ошибка в коде)
В задаче надо перевернуть все слова в строке, но мой код(Почему-то) переворачивает только 1ое слово. Я думаю, что проблема в while и что...

В строке перевернуть все слова нечётной длины
В строке перевернуть все слова нечётной длины Пример: &quot;дом&quot;=&quot;мод&quot; Помогите, пожалуйста


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru