在C ++中动态创建二维字符数组

时间:2013-02-11 11:51:34

标签: visual-c++

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

#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;
}

3 个答案:

答案 0 :(得分:0)

只需使用:

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

它将为您节省所有的头脑和心脏疼痛,防止你容易出错手动记忆管理问题。你要做的是解决问题C方式。使用C ++,正确的方法是使用字符串向量。

答案 1 :(得分: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;
    }
 }

答案 2 :(得分: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;
}