将字符串数组的元素与字符串进行比较

时间:2018-12-13 05:44:31

标签: c++ arrays string

因此,在练习弦乐时,我遇到了一个问题,该问题使我得到“ 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.
(字符串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 :(得分:0)

我已经以您的工作代码为起点。尝试避免使用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";
    }
}