0

我想通过指针动态创建一个二维字符数组。然后在其中输入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;
}
4

3 回答 3

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;
    }
 }
于 2013-02-11T12:01:44.133 回答
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;
}
于 2013-02-11T12:15:50.613 回答
0

只需使用:

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

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

于 2013-02-11T11:58:59.300 回答