сортировка массива строк один раз - PullRequest
2 голосов
/ 28 мая 2011

Этот код должен создать массив строк, случайным образом упорядочить их, а затем распечатать порядок.К сожалению, это добавляет пустую строку в одном из пробелов (я думаю, что это делает getline).Есть идеи как это исправить?Я попытался установить массив [0] = NULL;жалуется на операторов ...

#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <string>
#include <cstdlib>

using std::cout;
using std::endl;
using namespace std;

void swap (string &one, string &two)
{
    string tmp = one;
    one = two;
    two = tmp;
}
int rand_loc (int size)
{
    return (rand() % size);
}
int main()
{
    srand(time(NULL));
    int size;
    cin >> size;
    string *array = new string[size];
    //array[0] = NULL ;
    for (int x = 0; x < size; x++)
    {
        getline(cin, array[x]);
    }
    //for (int x = 0; x < size; x++)
    //{
    //    swap (array[rand_loc(size)], array[rand_loc(size)]);
    //}
    cout << endl;

    for (int x = 0; x < size; x++)
    {
        //out << array[x] << endl;
        int y = x + 1;
        cout<<y<<"."<<"   "<<array[x]<<endl;
    }
    delete[] array;
}

1 Ответ

6 голосов
/ 28 мая 2011

Первый вызов getline() немедленно попадет на новую строку, введенную пользователем после ввода size, и, следовательно, вернет пустую строку.Попробуйте позвонить cin.ignore(255, '\n'); до первого звонка getline().Это позволит пропускать до 255 (произвольно выбранного числа) символов до тех пор, пока не встретится \n (и новая строка также будет пропущена).

Редактировать: Как указывают @Johnsyweb и @ildjarn, std::numeric_limits<streamsize>::max() это гораздо лучший выбор, чем 255.

...