2015-11-05 148 views
0

我想在我的代碼中使用單個字符串的大小。這裏就是我有字符串數組中字符串的長度

const static char * keypad[] = { 
    "ex", 
    "bobbb", 
    "test", 
}; 

,但是當我嘗試使用,例如,

sizeof(keypad[i]); 

它不會爲每個字符串返回正確的大小。無論如何用C++來做到這一點?我限於

#include <stdio.h> 
#include <ctype.h> 

出於某種任意原因。

+0

你可以使用strlen? – taocp

+0

編寫你自己的一個,或者在線參考其他strlen實現。這裏是一些關於SO的討論:http://stackoverflow.com/questions/6584340/how-to-write-a-better-strlen-function或wiki https://en.wikipedia.org/wiki/C_string_handling#Implementation –

+0

'keypad'是一個3 char \ *的數組,所以'keypad [i]'是一個char \ *,所以sizeof(keypad [i])'告訴你char *的大小。 – immibis

回答

2

您可以對數組中的每個元素使用strlen函數。如果你不能使用string.h,那麼你可以編寫自己的。只需循環播放每個字符,直到找到終止的'\ 0'。

考慮到你的限制(大概是由老師?)你有兩個任務。一個是寫你自己的strlen函數。二是要弄清楚如何遍歷數組的每個元素。第二項任務歸結爲確定數組的長度(假設你沒有硬編碼它)。

+0

不幸的是,我不允許#include user3768729

2

keypad不是字符串的數組。它是一個指針的數組,每個指向C風格字符串(的第一個字符)。

sizeof keypad[i]爲您提供了其中一個指針的大小(可能爲4或8個字節)。

以確定字符串的長度的方式(定義爲字符的最多數量,但不包括該結束'\0'空字符)是調用strlen()功能。如果你不允許使用<string.h>,你必須自己編寫一個等效的函數。

(你可以合法聲明strlen而不包括<string.h>,但我相信這將被視爲作弊,所以我不會告訴你如何做到這一點。)

(該真正的方式做這在C++中是用來定義一個std::vector<std::string>,但顯然你不允許這樣做。也許目前練習的一部分是向你展示一種不同的方法可以有多方便。)

0

sizeof(keypad [i]);

是存儲地址的數組。 這些地址
地址[0]

地址[1]

地址[2]

點到串,因爲它們可具有大小爲4個字節或可以根據處理器變化指針。

,以獲得完整的尺寸

#include<iostream> 
#include<string.h> 
using namespace std; 
int main() 
{ 
const static char * keypad[] = { 
    "ex", 
    "bobbb", 
    "test", 
}; 
int i,size=0; 
for(i=0;i<sizeof(keypad)/sizeof(char*);i++) 
{ 
    size=size+strlen(keypad[i]); 
} 
cout<<size; 
}