2013-02-11 6 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

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