The challenge
Simple, given a string of words, return the length of the shortest word(s).
The string will never be empty and you do not need to account for different data types.
The solution in C++
Option 1:
int find_short(const std::string &str) {
std::istringstream inp(str);
std::string s;
int len = -1;
while (std::getline(inp, s, ' '))
if (s.length() < len)
len = s.length();
return len;
}
Option 2:
int find_short(std::string str) {
std::istringstream iss(str);
std::vector<std::string> vec{ std::istream_iterator<std::string>(iss), {} };
return std::min_element(vec.begin(), vec.end(), [](const std::string& s1, const std::string& s2) { return s1.length() < s2.length(); })->length();
}
Option 3:
#include <sstream>
int find_short(std::string str) {
std::stringstream ss(str);
auto buff = std::string();
auto shorter = std::numeric_limits<size_t>::max();
while (ss >> buff)
shorter = min(shorter, buff.size());
return shorter;
}
Test cases to validate our solution
Describe(Tests)
{
It(Sample_Test_Cases)
{
Assert::That(find_short("bitcoin take over the world maybe who knows perhaps"), Equals(3));
Assert::That(find_short("turns out random test cases are easier than writing out basic ones"), Equals(3));
Assert::That(find_short("lets talk about javascript the best language"), Equals(3));
Assert::That(find_short("i want to travel the world writing code one day"), Equals(1));
Assert::That(find_short("Lets all go on holiday somewhere very cold"), Equals(2));
Assert::That(find_short("Let's travel abroad shall we"), Equals(2));
}
};