2013-02-11 2 views
0

Я хочу, чтобы динамический массив двухмерных символов через указатели. Затем введите 10 строк, а затем возьмите строку цели от пользователя и найдите ее в массиве. если он присутствует, то верните его индекс. Я написал для него код, но он имеет ошибки. Пожалуйста, помогите мне в исправлении. Заранее спасибо.Динамическое создание массива двухмерных символов в C++

#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

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

Смежные вопросы