在C ++中将数组中的两个单独值存储到单个数组索引中

时间:2014-04-20 20:45:34

标签: c++ arrays chars

例如,我们说我有以下内容:

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]中。我将如何完成这项任务?在此先感谢!

2 个答案:

答案 0 :(得分: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 :(得分:1)

请提供正确形成的代码,您在此行中出错:

char buffer[length];

你的长度必须是常数。 您可以通过读取每个nomber并将其转换为int来解决此问题。但是没办法一次存储33个。