-1

私の文字列dはコンソールに空(スペースさえも)で表示されます。これは、文字列を「NULL」に初期化し、空の値ではない新しい値を割り当てようとしているため、混乱しています。

int main(){

    string user_String[99];
    int user_Input = 0;

    cout << "Please insert up to one hundred Strings: ";
    cin >> user_Input;


    //Check for range
    bool check = false;
    while( check == false){
        if (user_Input < 1 || user_Input >100){
            cout << "Please insert up to one hundred Strings: ";
            cin >> user_Input;}
        else{
            check = true;
            break;}
    }   

    //User input
    cout <<"Please enter string"<< endl;
    for (int counter = 0; counter < user_Input; counter++){
        int counter2 = counter + 1;
        cout << "Enter String " << counter2 << ": ";
        cin >> user_String[counter];
    }

    //Loopig for most letters
    string c = "NULL"; 
    for(int counter = 0; counter < user_Input; counter++){
        //Making Sure Coun doesn't go out of range
        int coun = 0;
        if (counter < user_Input){
            coun = counter +1;}
        else{
            coun = counter; 
        }

        string a = user_String[counter];
        string b = user_String[coun];       

        if (a.length() < b.length() && c == "NULL"){
            c = b;
        }

        if(a.length() < b.length() && c!="NULL" && c.length() < b.length()){
            c = b;
        }
        else{
            continue;
        }

    }
    cout << "The string "<< c <<" have the most letters." << endl;

    //Looping for least letters
    string d = "NULL"; 
    for(int counter = 0; counter < user_Input; counter++){
        //Making Sure Coun doesn't go out of range
        int coun = 0;
        if (counter < user_Input){
            coun = counter +1;}
        else{
            coun = counter; 
        }

        string a = user_String[counter];
        string b = user_String[coun];

        if (a.length() > b.length() && d == "NULL"){
            d = b;
        }

        if(a.length() > b.length() && d!="NULL" && d.length() > b.length()){
            d = b;
        }
        else{
            continue;
        }
    }
    cout << "The string " << d <<" have the least letters." << endl;


    system("pause");
    return 0;
}
4

1 に答える 1

1

ユーザーは最大 100 個の文字列を入力できますが、配列は最大 99 個の文字列しか保持できません。実際に 100 個の文字列を入力すると、最後の文字列でメモリが破損します。コードが完全にクラッシュしないと仮定してください。

また、あなたの手紙のループには、いくつかの誤ったロジックが含まれています。if (counter < user_Input)常に true になるため、常に true になりcoun、配列の最後に到達するcounter+1と配列の境界を超えます。counterまた、ループがやろうとしていることに対して不必要に複雑です。

代わりにこれを試してください:

int main()
{
    string user_String[100];
    int user_Input;

    do
    {
        cout << "Please enter the number of Strings (1-100): ";
        if (cin >> user_Input)
        {
            if ((user_Input >= 1) && (user_Input <= 100))
                break;
        }
        else
            cin.clear();
    }
    while (true);

    for (int counter = 0; counter < user_Input; ++counter)
    {
        cout << "Enter String " << counter + 1 << ": ";
        cin >> user_String[counter];
    }

    string b = user_String[0]; 
    for(int counter = 1; counter < user_Input; ++counter)
    {
        string a = user_String[counter];
        if (a.length() > b.length())
            b = a;
    }

    cout << "The string " << b << " has the most letters." << endl;

    b = user_String[0]; 
    for(int counter = 1; counter < user_Input; ++counter)
    {
        string a = user_String[counter];
        if (a.length() < b.length())
            b = a;
    }

    cout << "The string " << b <<" has the least letters." << endl;

    system("pause");
    return 0;
}

そうは言っても、配列を完全に取り除き、ループを一緒にマージできます。

int main()
{
    string user_String;
    int user_Input;

    do
    {
        cout << "Please enter the number of Strings: ";
        if (cin >> user_Input)
        {
            if (user_Input >= 1)
                break;
        }
        else
            cin.clear();
    }
    while (true);

    string fewestLetters, mostLetters;
    for (int counter = 1; counter <= user_Input; ++counter)
    {
        cout << "Enter String " << counter << ": ";
        cin >> user_String;

        if (counter == 1)
        {
            mostLetters = user_String;
            fewestLetters = user_String;
        }
        else
        {
            if (user_String.length() > mostLetters.length())
                mostLetters = user_String;

            if (user_String.length() < fewestLetters.length())
                fewestLetters = user_String;
        }
    }

    cout << "The string " << mostLetters << " has the most letters." << endl;
    cout << "The string " << fewestLetters << " has the least letters." << endl;

    system("pause");
    return 0;
}
于 2013-03-04T20:14:49.320 に答える