因此,在练习弦乐时,我遇到了一个问题,该问题使我得到“ 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;
}
}
}
答案 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";
}
}