Программа должна удалять каждое четное слово, дублировать каждое нечетное слово, заменять все вхождения букв 'д ' на 'т' и найти первое цифровое слово и умножить его значение на 5.
Вот программа
#include <iostream>
#include <string>
#include <sstream>
#include <Windows.h>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i, k;
int number = 0;
std::string s;
std::getline(std::cin, s);
std::istringstream iss(s);
std::string sr;
i = 0;
do
{
std::string sub;
iss >> sub;
if (i % 2 == 0)
{
sr.append(sub);
sr.append(sub);
sr.append(" ");
}
else
sr.append(" ");
i++;
} while (iss);
for (i = 0; i < sr.length(); i++)
if (sr[i] == 'д')
{
sr.erase(i, 1);
sr.insert(i, "т");
}
for (i = 0; i < s.length(); i++)
if ((s.substr(i, s.find(" ")) >= "0") && (s.substr(i, s.find(" ")) <= "9"))
if (s.substr(i + 1, 1) == " ")
if (i > 0)
{
if (s.substr(i - 1, 1) == " ")
{
k = atoi(s.substr(i, s.find(" ")).c_str());
std::cout << k << std::endl; //Для того, чтобы знать, что происходит
break;
}
}
else
{
k = atoi(s.substr(i, s.find(" ")).c_str());
std::cout << k << std::endl; //Это тоже
break;
}
std::cout << sr << std::endl;
std::cout << s << std::endl;
std::cout << k * 5 << std::endl;
return 0;
}
У меня почему-то не работает "Найти первое цифровое слово и умножить его значение на 5." т.е проблема в этом цикле
for (i = 0; i < s.length(); i++)
if ((s.substr(i, s.find(" ")) >= "0") && (s.substr(i, s.find(" ")) <= "9"))
if (s.substr(i + 1, 1) == " ")
if (i > 0)
{
if (s.substr(i - 1, 1) == " ")
{
k = atoi(s.substr(i, s.find(" ")).c_str());
std::cout << k << std::endl;
break;
}
}
else
{
k = atoi(s.substr(i, s.find(" ")).c_str());
std::cout << k << std::endl;
break;
}
Если в тексте будет число больше 9, то в последнем выводе "к" будет непонятное число, а если меньше 0, то цикл пропускает это число и идёт дальше. Мне кажется, что проблема в условии, но я не понимаю как её решить. Получается нужно, чтобы программа находила слово из строки "s", состоящее только из цифр, и умножил его на 5.
98 59 5 ввод
9898 55 вывод sr
98 59 5 вывод s
28830755 вывод k
-5 6 8 ввод
6 вывод k из цикла
-5-5 88 вывод sr
-5 6 8 вывод s
30 вывод k
Проверить цифровое ли слово, и если да, то умножить значение на 5(все можно делать так, как вы это сделали бы на бумаге:
bool find_number_and_multiply_5(string& str)
{
const std::string numbers("0123456789");
if (str.find_first_not_of(numbers) != str.npos)
return false;
int digit{}, surplus{};
for (int i = str.length() - 1; i >= 0; --i) {
digit = str[i] - '0';
digit *= 5;
digit += surplus;
surplus = digit / 10;
str[i] = digit % 10 + '0';
}
if (surplus)
str.insert(str.begin(), surplus + '0');
return true;
}
Но я думаю, что остальная часть программы у вас тоже не очень получается. Думайте проще....
Есть консольная программа с бинарными ресурсами (Windows)Нашел, как загружать, записывать в файл и так далее -
ЗдравствуйтеЕсть ли какие-нибудь существенные различия между такими определениями указателя:
Всем привет! Когда клиент отправляет серверу(или наоборот) буфер данных сделанное с помощью boost::asio::streambuf то данные как то смещаются и на выходе...