Тема: Вивести кількість букв у реченні, введеному з клавіатури, не враховуюч
/* Сьогодні 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;
}