Сохранение двух отдельных значений из массива в один индекс массива в переполнении стека

Например, допустим, у меня есть следующее:

char str[] = "33MayPen5";
int length = strlen(str);
char buffer[length];
int j = 0;

for(int i = 0; i < length; i++) {

buffer[j] = // I would like to read the number 33 from str and store it in buffer[0]
j++;
}

По сути, я хотел бы сохранить str [0] AND str [1], который равен 33, в буфер [0]. Как бы я справился с такой задачей? Заранее спасибо!

-1

Решение

Пожалуйста, предоставьте код, который правильно сформирован, у вас есть ошибка в этой строке:

char buffer[length];

Вы должны быть постоянными.
Вы можете решить эту проблему, прочитав каждый номер и преобразовав его в int. Но нет возможности хранить 33 сразу.

1

Другие решения

Если я правильно понял, вам нужно что-то, как

char str[] = "33MayPen5";
int length = strlen(str);
char *buffer = new char[length];
int j = 0;

for ( int i = 0; i < length && std::isdigit( str[i] ); i++ )
{

buffer[j++] = str[i];
}

Или если вам нужно сохранить все цифры из str в буфере, то цикл может выглядеть как

for ( int i = 0; i < length; i++ )
{

if ( std::isdigit( str[i] ) ) buffer[j++] = str[i];
}

Конечно, было бы лучше, если бы вы использовали std :: string вместо динамически размещаемого массива.

В этом случае оба примера будут выглядеть как

std::string buffer;
buffer.reserve( length );

for ( int i = 0; i < length && std::isdigit( str[i] ); i++ )
{
buffer.push_back( str[i] );
}

а также

std::string buffer;
buffer.reserve( length );

for ( int i = 0; i < length; i++ )
{

if ( std::isdigit( str[i] ) ) buffer.push_back( str[i] );
}

РЕДАКТИРОВАТЬ: Я вижу, вы изменили свой пост.

Когда код может выглядеть как

char str[] = "33MayPen5";
int length = strlen(str);
unsigned char *buffer = new unsigned char[length];

unsigned char c = 0;

for ( int i = 0; i < length && std::isdigit( str[i] ); i++ )
{

c = c * 10 + str[i];
}
buffer[0] = c;
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector