2014-04-20 23 views
-1

例如,讓我們說我有以下:存儲從陣列中的兩個獨立的值到C++中的單個陣列索引

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]和STR [1]它是33,到緩衝區[0]。我將如何完成這樣的任務?提前致謝!

+0

你能夠使用String類嗎? – dgp

+1

你必須更精確。你想將「33」轉換爲33的char值嗎?對於「馬」?你想要的ASCII碼的總和......? – AntiClimacus

回答

1

請提供正確形成的代碼,你必須在這條線的錯誤:

char buffer[length]; 

您lenght必須是常量。 你可以通過讀取每個nomber並將其轉換爲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; 
+0

-1,太倉促了嗎?你不能聲明一個可變大小的緩衝區;) –

+0

@Casper Von B好評。我甚至沒有考慮到他使用非const表達式。 –

+1

來吧人哈哈 - 'char緩衝區=新字符[長度];';) –