2013-02-11 87 views
0

我想通过指针动态创建2维字符数组。然后在其中输入10个字符串,然后从用户获取一个字符串目标并在数组中找到它。如果它存在,则返回其索引。我为它编写了代码,但它有错误。请帮我纠正它。提前致谢。在C++中动态创建2维字符数组

#include<iostream> 
#include<string> 
using namespace std; 
int strsearch(char [][50],char *); 
int main() 
{ 
    char str[10][50]; 
    char *target=new char [50]; 
    int index; 
    for(int i=0; i<10; i++) 
    { 
     str = new char* [50]; 
     str++; 
    } 

    for(int i=0; i<10; i++) 
    { 
     cout<<"Enter a sting"; 
     cin>>str[i][50]; 
     str++; 
    } 
    cout<<"Enter a string to find:"; 
    cin>>target; 
    index=strsearch(str,target); 
    if(index<0) 
    { 
     cout<<"String not found"; 
    } 
    else 
    { 
     cout<<"String exist at location "<<index<<endl; 
    } 
    return 0; 
} 

int strsearch(char string[10][50],char *fstr) 
{ 
    int slen; 
    for(int i=0;i<10;i++) 
    { 
     slen=strlen(**string); 
     if (strnicmp(*string[50],fstr,slen)== 0) 
     { 
      return i; 
     } 
    } 
    return -1; 
} 

回答

0

只需使用:

std::vector<std::string> obj; 

这将节省您所有的头&心脏疼痛和守护你对容易出问题的手动内存管理问题。你所要做的是解决C方式的问题。使用C++的正确方法是使用一个字符串向量。

0

我想这是在任何情况下的错误:

for(int i=0;i<10;i++) 
{ 
    slen=strlen(**string); 
    if (strnicmp(*string[50],fstr,slen)== 0) 
    { 
     return i; 
    } 
} 

必须是这样的:

for(int i=0;i<10;i++) 
{ 
    slen=strlen(string[i]); 
    if (strnicmp(string[i],fstr,slen)== 0) 
    { 
     return i; 
    } 
} 
+0

你说得对。通过这样做,一个错误被删除。 – zorroz 2013-02-11 13:58:43

0

我已经做了一些修正,我认为它可以帮助你,但我还没有编译检查错误。

#include<iostream> 
#include<string> 
#define DIM_1 10 // Avoid to use "magic numbers" in your code 
#define DIM_2 50 

using namespace std; 
int strsearch(char **string,char *fstr); 
int main() 
{ 
    char **str = new char*[DIM_1]; //char str[10][50]; dynamically allocated array. 
    char *target=new char [DIM_2]; 
    int index; 
    for(int i=0; i<DIM_1; i++) 
    { 
     str[i] = new char[DIM_2]; //Do not lost the original pointer 
     //str++; 
    } 

    for(int i=0; i<DIM_1; i++) 
    { 
     cout<<"Enter a sting"; 
     cin>>str[i][DIM_2]; 
     //str++; Do not lost the original pointer 
    } 
    cout<<"Enter a string to find:"; 
    cin>>target; 
    index=strsearch(str,target); 
    if(index<0) 
    { 
     cout<<"String not found"; 
    } 
    else 
    { 
     cout<<"String exist at location "<<index<<endl; 
    } 
    // Free memory!! 
    for (int i=0; i<DIM_1;i++) delete[] str[i]; 
    delete[] str; 
    delete[] target; 

    return 0; 
} 

int strsearch(char **string,char *fstr) //its dinamicly allocated array 
{ 
    int slen; 
    int result=-1; //Only one return-> structured programming 
    for(int i=0;i<DIM_1;i++) 
    { 
     slen=strlen(**string); 
     //strlen and strnicmp is C, not C++, check string class. 
     if (strnicmp(string[i],fstr,DIM_2)== 0) //Find in the string[i] 
     { 
      result= i; 
     } 
    } 
    return result; 
} 
+0

您的代码几乎没有错误。但我删除了它们。它也纠正了我的一些错误。谢谢。 – zorroz 2013-02-11 14:00:17