Я пытаюсь написать функцию, которая вернет кратчайшую строку из vector<string>
:
// Find the shortest string.
string shortestString(vector<string> v) {
string shortest;
int shortss = 0;
int i = 0;
for (string s : v) {
if (i = 0) {
shortss = s.length();
shortest = s;
i++;
}
else if (s.length() < shortss) {
shortss = s.length();
shortest = s;
}
}
return shortest;
}
IDK, если я совершил какую-то глупую ошибку, но ничего не возвращает. Вот моя main()
:
int main() {
vector<string> words = { "a", "ab", "abc" };
string shor = shortestString(words);
cout << shor;
}
Ничего не печатается. Что я делаю не так?
Это утверждение:
if (i = 0) {
должно быть
if (i == 0) {
При единственном равенстве =
, это оператор присваивания, а результат - назначенное значение. Поэтому он не будет тестировать i
чтобы увидеть, равен ли он нулю или нет, он будет присваивать 0 i
а затем не запускать это, if
блок.
Вы также можете использовать алгоритм STL для этого.
smin = *std::min_element(v.begin(), v.end(),
[] (const std::string& s1, const std::string& s2) {
return s1.length() < s2.length(); }
);
shortss
вstd::numeric_limits<int>::max()
, вам не нужно проверять «первую» итерацию. Другими словами, любая ваша строка будет короче max int.