0

次のコードでは、いくつかのレコードを配列に入力し、最後に文字列のレコードを比較して出力を生成したいと考えています。比較機能の機能を取得していません。助けてください...................

#include <iostream> 
#include <string>
using namespace std;

int compare(string record[20], int numb1)
{
    system("pause");
    int i;
    string str, substring;
    cout<<"enter the string"<<endl;
    getline(cin, str);
    for (i=0;i<numb1;i++)
    {
        if(str == record[i])
        {
               substring = str.substr(0,2); 
        }
        break;
    }
    if (substring == 'del')
    {
             cout<<"you have a delux type"<<endl;
    }
    else if ('bas' == substring)
    {
         cout<<"you have a basics type"<<endl;
    }
    else
    {
        cout<<"invalid id"<<endl;
    }
    system("pause");
    return 0;
}

int enter_record(int n)
{
    int i;
    string rec[20];
    char choice_1;
    for(i=0;i<n1;i++)
    {
    cout<<"enter value for "<<i+1<<" record"<<endl;
    cin>> rec[i];
    }
    cout <<"\t\t\t FINAL DESIGNED PACKAGES ARE :- "<<endl;
    cout <<"\t\t\t ----------------------------"<<endl;
    for(i=0;i<n;i++)
    {
              cout<<i+1<<". "<<rec[i]<<endl;
    }         
    cout<< "\t\t\tdo you want to compare an string (y/n)"<<endl;
    if ('y' == choice_1)
    {
       compare(rec, n);
    }
    system("pause");
    return 0;
}

int main()
{
    int numb;
    cout<<"\t\t\t WELCOME TO TOUR PACKAGE CHECKING"<<endl;
    cout<<"\t\t\t --------------------------------"<<endl;
    cout<<"enter number of records you want"<<endl;
    cin>>numb;
    enter_record(numb);
    return 0;
}
4

2 に答える 2

1

C++ では、文字に単一ティックが使用されます。delは法人格ではありません。だから、あなたがしたい"del"、ではありません'del'。しかし実際には、C スタイルの配列よりもスマートなものを使用する必要があります。

于 2013-01-13T08:33:08.013 に答える
0

substring = str.substr(0,3);の代わりに行う必要がありstr.substr(0,2);ます。2 番目のパラメーターは substring の長さであることを思い出してください。したがって2、の代わりにを使用するとdel、 が得られdeます。これが、あなたが常に「無効なID」を取得していると推測している理由です。@Davidが言うように、文字列の周りの引用符も修正する必要があります。

もちろん、バッファオーバーフローなど、コードには他にも問題があります。最大20レコードを想定していますが、200を入力しようとすることもできます... @chrisのアドバイスを受けてstd::vector、文字列の生の配列の代わりに使用してください。


編集

上記の問題に到達する前に、論理エラーもあります。以下のスニペットを参照してください。

cout<< "\t\t\tdo you want to compare an string (y/n)"<<endl;
if ('y' == choice_1)
{
   compare(rec, n);
}

ユーザーに入力を求めますが、実際には入力しません。したがって、初期化されていないものと false である可能性が高いものを比較しているcharためy、比較関数は呼び出されません。

cin>>choice_1の前にa を追加する必要がありifます。

于 2013-01-13T08:34:54.877 に答える