如何用其他值冒泡排序空格?

时间:2014-04-06 10:10:40

标签: c++

我正在尝试从用户输入输入并输入冒号然后输出结果。我的代码:

    #include<iostream>
    using namespace std;
    class bubble
    {
    public :

        string arr[20];

        //Number of elements in array
        int n;

        //Function to accept array elements
        void read()
        {
            while(1)
            {
                cout<<"\nEnter the number of elements in the array:";
                cin>>n;
                if(n<=20)

                    break;
                else
                    cout<<"\n Array can have maximum 20 elements \n";
            }
            //display the header
            cout<<"\n";
            cout<<"----------------------\n";
            cout<<"Enter array elements \n";
            cout<<"----------------------\n";

            //Get array elements
            for( int i=0; i<n ;i++ )
            {
                cout<<"<"<<i+1<<"> ";
                cin>>arr[i];
            }
        }
        //Bubble sort function
        void bubblesort()
        {
            for( int i=1;i<n ;i++ )//for n-1 passes
            {
                //In pass i,compare the first n-i elements
                //with their next elements
                for( int j=0; j<n-1; j++)
                {
                    if(arr[j] > arr[j+1])
                    {
                        string temp;
                        temp = arr[j];
                        arr[j] = arr[j+1];
                        arr[j+1] = temp;

                    }

                }
            }
        }
        void display()
        {
            cout<<endl;
            cout<<"----------------------\n";
            cout<<"Sorted array elements \n";
            cout<<"----------------------\n";
            for( int j=0; j<n; j++)
                cout<<arr[j]<<endl;
        }
};
int main()
{
    //Instantiate an instance of class
    bubble list;
    // Function call to accept array elements
    list.read();
    // Function call to sort array
    list.bubblesort();
    //Function call to display the sorted array
    list.display();
    return 0;
}

代码运行正常,但它不接受字符串中的空格或缩进值作为输入。有没有办法让它接受这些价值观?

3 个答案:

答案 0 :(得分:1)

>>替换为std::getline,它允许您读取包含空格的字符串:

// Extract the \n that's left from entering n
getline(cin, arr[0]); // We'll read it again in the loop
for( int i=0; i<n ;i++ )
{
    cout<<"<"<<i+1<<"> ";
    getline(cin, arr[i]);
}

答案 1 :(得分:1)

使用std::getlinestd::vector<std::string>。只要用户没有输入空行,就读取行。

#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> strings;

    std::string line;
    bool user_wants_to_quit = false;
    while (!user_wants_to_quit && std::getline(std::cin, line))
    {
        if (!line.empty())
        {
            strings.push_back(line);
        }
        else
        {
            user_wants_to_quit = true;
        }
    }

    std::cout << "Lines:\n";
    for (std::vector<std::string>::const_iterator iter = strings.begin(); iter != strings.end(); ++iter)
    {
        std::cout << *iter << "\n";
    }
}

答案 2 :(得分:0)

您可以使用std::getline从流中读取所有令牌:

//Get array elements
getline(cin, arr[0]);
for( int i = 0; i < n ; ++i)
{
    cout << "<" << i+1 << "> ";
    getline( cin, arr[ i]);
}