2015-04-17 139 views
8

給定一個字符串數組,我需要找出它中的字符串數。查找字符串的二維數組中的字符串數

我跟着this

,但如果我傳遞到這個函數,這並不工作。

這裏就是我試圖

#include<string> 
#include<iostream> 
#include<cstdio> 
#include<cstring> 
using namespace std; 

int f1(char* input1[]) 
{ 

    string s=""; 

    cout<<sizeof(input1)<<endl; //print 4 
    cout<<sizeof(char*)<<endl; //print 4 
    int l=sizeof(input1)/sizeof(char*); 
    //giving l=1 here but should be 8 
} 

int main() 
{ 
    char *str2[]={"baba","sf","dfvf","fbfebgergrg","afvdfvfv","we","kkhhff","L"}; 
    int l=sizeof(str2)/sizeof(char*); 
    cout<<l<<endl; //print 8 
    cout<<sizeof(str2)<<endl; //print 32 
    cout<<sizeof(char*)<<endl; //print 4 
    f1(str2); 
} 
+0

你知道你必須解決這個問題的編譯器嗎? – MikeMB

回答

8

sizeof(char*)給你char*指針(也就是4您的系統上)的大小不同的代碼。

sizeof(str2)給你的數組大小str2。有8個元素,每個元素都是一個指針類型。因此,系統上的總大小爲8 x 4 = 32.

要獲取字符串的長度,請使用strlen

請考慮將std::vector<std::string>>作爲C++中的替代選項。

+0

這不是strlen(* input1)在函數中再次給出4作爲輸出。 – Guru

+2

@Guru這是因爲'input1'不是一個數組。它是'char **'。請閱讀[如何在C++中使用數組](http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c),尤其是數組到指針的轉換部分。 – jrok

+0

@jrok:那我該怎麼做才能得到輸出8的功能? – Guru

1

如果只有指向它的指針,則無法知道數組的長度。而且你只有一個指針,因爲你不能按值傳遞數組。傳遞給函數的數組將自動衰減爲指針,參數類型char* foo[]等效於char** foosize_of沒有幫助,因爲它只會顯示指針本身的大小。

將長度作爲參數傳遞給f1。或者更好的是,使用std::vectorstd::array

我不能修改給定函數原型

嗯,這是不幸的。那麼你必須採取一些欺騙手段。最簡單的解決方法是將長度存儲在全局變量中而不是函數參數中。

另一種可能性是終止值例如,總是用nullptr結束數組,並且絕不允許其他元素具有該值。與c字符串以空字符結尾的方式相同。然後你可以在遇到nullptr時停止迭代數組。但我認爲你不能修改數組。

+0

,我知道的很好,但實際上這是一個在線比賽問題,我需要這個功能。在那裏我不能修改給定的函數原型。是不是有其他方式,我不需要修改f1 – Guru

+0

@Guru的原型,如果你知道的很好,那麼爲什麼你問爲什麼'size_of'不起作用?無論如何,你可以訴諸全球而不是參數。 – user2079303