Написала функцию, но она меняет числа посимвольно =(
#include <iostream>
#include <string>
using namespace std;
void MinimizeNumbers(string &src);
int main(){
string str;
MinimizeNumbers(str);
return 0;
}
void MinimizeNumbers(string &src){
getline (cin, src);
char min = 999999;
for (int i= 0; i < src.length(); i++){
if(isdigit(src[i]) ){
if(src[i] < min)
min = src[i];
src[i] = min;
}
}
cout << src;
}
При вводе 2 15 44 выдает 2 22 22, а нужно чтобы выдавала 2 2 2
Вот, как смог (осталось только разбить на функции):
#include <iostream>
#include <sstream>
#include <cctype>
#include <climits>
#include <string>
int main()
{
using namespace std;
string input;
cout << "Input >> ";
getline(cin, input);
istringstream instr(input);
int minValue = INT_MAX;
int currentValue;
// Пропускаем все символы пока не встретим первую цифру
while (instr && !isdigit(instr.peek()))
{
instr.get();
}
// Если мы не дошли до конца строки и встретили первую цифру, то читаем все число
while (instr >> currentValue)
{
// Определяем меньше ли это число предыдущего и повторяем
minValue = currentValue < minValue ? currentValue : minValue;
while (instr && !isdigit(instr.peek()))
{
instr.get();
}
}
istringstream inResult(input);
string result;
// Заносим все символы из входной строки до первого числа
while (inResult && !isdigit(inResult.peek()))
{
result += inResult.get();
}
// Если встретили число, читаем его (что бы пропустить)
while (inResult >> currentValue)
{
// а вместо него вставляем наше минимальное число и повторяем
result += to_string(minValue);
while (inResult && !isdigit(inResult.peek()))
{
result += inResult.get();
}
}
// Вывод результатов
cout << input << endl;
cout << result << endl;
return 0;
}
Ловите страшный костыль ) Но работает как танк)
#include <iostream>
#include <string>
#include <sstream>
int main() {
std::string line{"aa 12 2 1 123 s2 31 4 ss"};
std::istringstream ss{line};
std::string s;
int min{std::numeric_limits<int>::max()};
while(ss >> s) {
int n{};
std::istringstream iss (s);
iss >> n;
if (iss.fail()) {
continue;
}
min = std::min(min, n);
}
std::istringstream ss2{line};
std::string s2;
while(ss2 >> s2) {
int n{};
std::istringstream iss (s2);
iss >> n;
if (iss.fail()) {
std::cout << s2 << " ";
continue;
}
std::cout << min << " ";
}
std::cout << std::endl;
return 0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Попробовал так, но не получил адекватных значений
Подскажите, можно ли средствами C++ как-нибудь реализовать новый тип, состоящий из нескольких слов, как long int, что-то типа