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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.07.2018, 15:19   #1
Андрей Ш++
учу с++
Пользователь
 
Аватар для Андрей Ш++
 
Регистрация: 06.10.2017
Сообщений: 44
По умолчанию Распаковка строки - С++

Помогите сделать так чтобы можно было использовать числа больше 10!
Код:
#include <iostream>

using namespace std;

int main()
{
    char stroka[50];
    int a=0;
    while (a!= 50){
        stroka[a]=0;
        a++;
    }
    a=0;
    int b=0;
    cin.getline(stroka, 50);
    int chislo_is_stroki=0;;
    while (a!=50){
        if (stroka[a]>='1'&&stroka[a]<='9'){
            chislo_is_stroki=stroka[a]-49;

            while (chislo_is_stroki!=0){
                cout <<stroka[a+1];
                chislo_is_stroki--;

            }
        }
        else{
            cout <<stroka[a];
        }
        b=0;
        a++;
    }
}
Андрей Ш++ вне форума Ответить с цитированием
Старый 18.07.2018, 15:27   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Знакомьтесь:
https://en.cppreference.com/w/cpp/string/byte/atoi
https://en.cppreference.com/w/cpp/st...ic_string/stol
https://en.cppreference.com/w/cpp/utility/from_chars
https://en.cppreference.com/w/cpp/io/c/fscanf
и им подобные

Ну либо сами парсите пока цифра и умножайте на 10 в нужной степени.
p51x вне форума Ответить с цитированием
Старый 18.07.2018, 16:23   #3
Андрей Ш++
учу с++
Пользователь
 
Аватар для Андрей Ш++
 
Регистрация: 06.10.2017
Сообщений: 44
По умолчанию

Код:
#include <iostream>

using namespace std;

int main()
{
    char stroka[50];
    int a=0;
    while (a!= 50){
        stroka[a]=0;
        a++;
    }
    a=0;
    int b=0;
    cin.getline(stroka, 50);
    int chislo_is_stroki=0;;
    while (a!=50){
        if (stroka[a]>='1'&&stroka[a]<='9'){
            if (stroka[a+1]>='1'&&stroka[a+1]<='9'){
                chislo_is_stroki=stroka[a]-49;
                chislo_is_stroki=chislo_is_stroki*10;
                chislo_is_stroki=chislo_is_stroki+stroka[a+1];
                while (chislo_is_stroki!=0){
                    cout <<stroka[a+2];
                    cout<<chislo_is_stroki;
                    chislo_is_stroki--;
                }
            }
            else{
                chislo_is_stroki=stroka[a]-49;
                while (chislo_is_stroki!=0){
                    cout <<stroka[a+1];
                    chislo_is_stroki--;

                }

            }
        }
        else{
            cout <<stroka[a];
        }
        chislo_is_stroki=0;
        a++;
    }
}
В моей голове всё должно работать правильно но как-то с двумя цифрами у меня не помучается
Андрей Ш++ вне форума Ответить с цитированием
Старый 18.07.2018, 16:32   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код:
chislo_is_stroki=chislo_is_stroki+stroka[a+1];
почему из второго кода 49 не вычли?
p51x вне форума Ответить с цитированием
Старый 18.07.2018, 16:58   #5
Андрей Ш++
учу с++
Пользователь
 
Аватар для Андрей Ш++
 
Регистрация: 06.10.2017
Сообщений: 44
По умолчанию

даже если вычел нечего не меняеться
Андрей Ш++ вне форума Ответить с цитированием
Старый 18.07.2018, 17:01   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Ну так правьте дальше - очевидно, что a надо не просто инкрементировать, а сдвигать на кол-во обработанных символов.
p51x вне форума Ответить с цитированием
Старый 18.07.2018, 17:20   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

какую задачу пытаетесь решить?
и зачем цикл до 50?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.07.2018, 17:22   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
какую задачу пытаетесь решить?
Написать свой костыль для распаковки строки, типа 4ф2ц -> ффффцц

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
и зачем цикл до 50?
Ну нравится ему ограничение строки в 50 и он думает, что getline ему магически всегда запрошенное кол-во символов вернет.
p51x вне форума Ответить с цитированием
Старый 18.07.2018, 17:25   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

p51x, вот, теперь стало понятно, спасибо.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
распаковка архивов - c# ya_yanchik-2909 C# (си шарп) 33 23.08.2019 10:25
Распаковка строки - С++ Андрей Ш++ Помощь студентам 3 17.07.2018 20:23
Распаковка Zlib ДралсяСошибками Общие вопросы Delphi 5 17.12.2013 13:37
Распаковка формата Brutalus Общие вопросы Delphi 17 08.06.2012 07:16
Распаковка Dll Hookis1 Фриланс 9 09.03.2010 09:38