Сравнение элемента массива строк со строкой - PullRequest
0 голосов
/ 13 декабря 2018

Итак, во время практики строк я наткнулся на вопрос, который дал мне «n» строк и попросил выводить строки в возрастающем алфавитном порядке.
Пример:

Input>>  
4           // number of string  
abcdef ghi  // string 1  
ccdef       // string 2    
bcdcas      // string 3  
xcxvb       // string 4  
vxzxz       // string 5  

Этобудет выводить только строки 1,2,4, потому что мы должны печатать строку в возрастающем алфавитном порядке.
строка 1 <строка 2 <строка 4. <br>(строка 3 меньше строки 2 и, следовательно, вывод)

Итак, я закодировал проблему без использования строкового массива, и это сработало, но когда я применил тот же подход, результат был неправильным.

Возможно, я не знаю что-то о строковом массиве, что выребята, можете помочь мне.

Вот код для вас, ребята:

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    string array[n];
    cin.ignore();
    for(int i=0; i<n;i++){
        getline(cin , array[i]);
    }
    cout << array[0] << endl;
    string maximum;
    for(int i = 0; i<n; i++){
        maximum = array[0];
        if(array[i] > maximum){
            maximum = array[i];
            cout << maximum << endl;
        }


    }
}

Вот код, который работал без проблем:

 using namespace std;

 int main()
 {
   ios::sync_with_stdio(false);
   int n;
   cin >> n;
   string text;
   cin.ignore();
   string max = "";
   for(int i=0; i<n;i++){
      getline(cin , text);
      if(text>max){
         max = text;
         cout << text << endl;
      }
   }

}

1 Ответ

0 голосов
/ 13 декабря 2018

Я использовал ваш рабочий код в качестве отправной точки.Старайтесь избегать массивов в стиле c и используйте вместо этого один из контейнеров C ++ (например, std::vector).

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

int main()
{
    int n;
    std::string text;
    std::vector<std::string> array;

    std::cout << "Enter number of strings: ";
    std::cin >> n;
    std::cin.ignore();

    for(int i=1; i<=n;i++) {
        std::cout << "Enter string " << i << ": ";
        std::getline(std::cin, text);

        // check if we already have stored anything in the array and
        // then check if text is <= than the last element in the array.
        // if so, continue will skip to the next iteration in the for-loop

        if(array.size()>0 && text<=array.back()) continue;

        std::cout << "saved " << text << "\n";
        array.emplace_back(std::move(text));
    }

    std::cout << "All saved strings:\n";
    for(auto& s : array) {
        std::cout << s << "\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...