2015-04-17 201 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