我想在我的代碼中使用單個字符串的大小。這裏就是我有字符串數組中字符串的長度
const static char * keypad[] = {
"ex",
"bobbb",
"test",
};
,但是當我嘗試使用,例如,
sizeof(keypad[i]);
它不會爲每個字符串返回正確的大小。無論如何用C++來做到這一點?我限於
#include <stdio.h>
#include <ctype.h>
出於某種任意原因。
我想在我的代碼中使用單個字符串的大小。這裏就是我有字符串數組中字符串的長度
const static char * keypad[] = {
"ex",
"bobbb",
"test",
};
,但是當我嘗試使用,例如,
sizeof(keypad[i]);
它不會爲每個字符串返回正確的大小。無論如何用C++來做到這一點?我限於
#include <stdio.h>
#include <ctype.h>
出於某種任意原因。
您可以對數組中的每個元素使用strlen函數。如果你不能使用string.h,那麼你可以編寫自己的。只需循環播放每個字符,直到找到終止的'\ 0'。
考慮到你的限制(大概是由老師?)你有兩個任務。一個是寫你自己的strlen函數。二是要弄清楚如何遍歷數組的每個元素。第二項任務歸結爲確定數組的長度(假設你沒有硬編碼它)。
不幸的是,我不允許#include
keypad
不是字符串的數組。它是一個指針的數組,每個指向C風格字符串(的第一個字符)。
sizeof keypad[i]
爲您提供了其中一個指針的大小(可能爲4或8個字節)。
以確定字符串的長度的方式(定義爲字符的最多數量,但不包括該結束'\0'
空字符)是調用strlen()
功能。如果你不允許使用<string.h>
,你必須自己編寫一個等效的函數。
(你可以合法聲明strlen
而不包括<string.h>
,但我相信這將被視爲作弊,所以我不會告訴你如何做到這一點。)
(該真正的方式做這在C++中是用來定義一個std::vector<std::string>
,但顯然你不允許這樣做。也許目前練習的一部分是向你展示一種不同的方法可以有多方便。)
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;
}
你可以使用strlen? – taocp
編寫你自己的一個,或者在線參考其他strlen實現。這裏是一些關於SO的討論:http://stackoverflow.com/questions/6584340/how-to-write-a-better-strlen-function或wiki https://en.wikipedia.org/wiki/C_string_handling#Implementation –
'keypad'是一個3 char \ *的數組,所以'keypad [i]'是一個char \ *,所以sizeof(keypad [i])'告訴你char *的大小。 – immibis