0

ポインターを介して動的に 2 次元の文字配列を作成したいと考えています。次に、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

いくつかの修正を行いました。役立つと思いますが、エラーをチェックするためにコンパイルしていません。

#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

いずれにせよ、これはエラーだと思います:

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

単純に使用します:

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

それはあなたの頭と心の痛みをすべて救い、間違った手動のメモリ管理の問題からあなたを守ります。あなたがやろうとしているのは、問題を C の方法で解決することです。C++ でこれを行う正しい方法は、文字列のベクトルを使用することです。

于 2013-02-11T11:58:59.300 に答える