Тема: Вивести кількість букв у реченні, введеному з клавіатури, не враховуюч
/* Сьогодні 19:59:25
Вивести кількість букв у реченні, введеному з клавіатури, не враховуючи
пропуски.
2. Визначити скільки букв ‘d’ є у реченні, введеному з клавіатури..
3. Вивести абревіатуру зі слів, введених з клавіатури – передостанні літери
кожного слова.
4. Вивести найменше слово у зворотньому порядку.
5. Ввести з клавіатури літеру. Замінити всі перші літери слів на введену літеру.
6. Вивести всі слова без останньої літери (можна останні літери не виводити на
екран, не видаляючи їх як символи з масиву). */
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
size_t NumLetters(std::string);
size_t NumLetters(std::string, char);//num letters in a sentence
std::vector<std::string> split(const std::string&, const std::string&);
std::string Abbrev(std::vector<std::string>&);
std::string SmallestWord(std::vector<std::string>&);
std::string ReverseString(std::string);
void ReplaceFirstLetter(std::vector<std::string>&, char&);
int main()
{
    std::string inputsring("fhfh hh_d087dd dgf hghgjsdd fhkkj[-09 dgf 7777 uiiopm_78 8++++ ytty /ytytd");
    std::cout << "Input string " << std::endl;
    //std::getline(std::cin,inputsring);
    std::cout << inputsring << std::endl;
    //std::string inputsring
    size_t value;
    value = NumLetters(inputsring);
    std::cout << "1.Numbers of letters = " << value << std::endl;
    char ch = 'd';
    value = NumLetters(inputsring, 'd');
    std::cout << "2.Numbers of letters '" << ch << "' = " << value << std::endl;
    std::string delim(" ");
    std::vector<std::string> vwords;
    vwords = split(inputsring, delim);
    for (size_t i = 0; i < vwords.size(); i++)
        std::cout << "words[" << i << "] = " << vwords[i] << "\t";
    std::cout << std::endl;
    std::string str, rstr;
    str = Abbrev(vwords);
    std::cout << "3.abbreviation " << str << std::endl;
    str = SmallestWord(vwords);
    rstr = ReverseString(str);
    std::cout << "4. smallest word in reverse order " << rstr << std::endl;
    std::cout << "5. enter letter ";
    std::cin >> ch;
    ReplaceFirstLetter(vwords, ch);
    for (size_t i = 0; i < vwords.size(); i++)
        std::cout << "words[" << i << "] = " << vwords[i] << "\t";
    return 0;
}
void ReplaceFirstLetter(std::vector<std::string>& vwords, char& c)
{
    std::string str;
    char    tmp(c);
    //std::string delim(c);
    for (size_t i = 0; i < vwords.size(); i++)
    {
        str = vwords[i];
        //for (size_t j = 0; j <  )
        str[0] = tmp; //.replace(0, 1, c);//str);
        vwords[i] = str;
    }
}
std::string ReverseString(std::string str)
{
    std::string result;
    for (int i = str.length() - 1; i >= 0; i--)
        result += str[i];
    return result;
}
std::string SmallestWord(std::vector<std::string>& v)
{
    size_t len = v[0].size();
    size_t pos = 0;
    //std::string result;
    for (size_t i = 0; i < v.size(); i++)
    {
        if (len > v[i].size())
        {
            len = v[i].size();
            pos = i;
        }
    }
    return v[pos];
}
std::string Abbrev(std::vector<std::string>& v)
{
    std::string str;
    std::string result;
    for (size_t i = 0; i < v.size(); i++)
    {
        str = v[i];
        if (str.size() < 2) continue;
        result += str.substr((str.size() - 2), 1);
    }
    return result;
}
std::vector<std::string> split(const std::string& str, const std::string& delim)
{
    std::vector<std::string> result;
    size_t found = str.find(delim);
    size_t startIndex = 0;
    while (found != std::string::npos)
    {
        result.emplace_back(str.begin() + startIndex, str.begin() + found);
        startIndex = found + delim.size();
        found = str.find(delim, startIndex);
    }
    if (startIndex != str.size())
        result.emplace_back(str.begin() + startIndex, str.end());
    return result;
}
size_t NumLetters(std::string str, char c)
{
    size_t num = 0;
    for (size_t i = 0; i < str.size(); i++)
    {
        if (str[i] == c)
        {
            num++;
        }
    }
    return num;
}
size_t NumLetters(std::string str)
{
    size_t num = 0;
    for (size_t i = 0; i < str.size(); i++)
    {
        if (!std::isspace(str[i]))
        {
            num++;
        }
    }
    // str[i] == '\t' || str[i] == )
    return num;
}