Задача состоит в том, что бы программа принимала строку, и по отдельности выводила в разные строки её буквы(абвгд и тд.), цифры(1234) и спец символы(*,/,+,- и тд.) Например строка "Привет-Я-Агент-007" выводилась как: "ПриветЯАгент","---","007". Проблема похоже в самом алгоритме, так как программа не всегда работает корректно, помогите пожалуйста решить проблему. Насчет вывода в конце кода - не обращайте внимание, я потом сам его создам, главное что бы программа работала правильно, а в моем случае некоторые символы пропадают или вообще выводятся новые, несуществующие.
#include <string>
#include <iostream>
using namespace std;
int main ()
{
string Str="qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
string Chars="!@#$%^&*()_+-/.<>";
string Numbers="1234567890";
string inputStr;
cin>>inputStr;
for (int i=0;i<=inputStr.length();i++)
{
for(int j=0;j<=inputStr.length();j++)
{
if (inputStr[i]==Str[j]) cout<<Str[j];
else if (inputStr[i]==Chars[j]) cout<<Chars[j];
else if (inputStr[i]==Numbers[j]) cout<<Numbers[j];
}
}
}
Для таких целей стандартная библиотека предоставляет альгоритмы разделители, и задача легко решается (два вызова std::partition_copy). Я захотел продемонстрировать побольше альгоритмов_разделителей, поэтому пошел путем чуть посложнее:
using namespace std;
string inputStr, digits, alpha, space;
cin >> inputStr;
// разделяем буквы и цифры от других символов с копированием в строки
partition_copy(inputStr.begin(), inputStr.end(),
back_inserter(digits), back_inserter(space),
[](char c) { return isalnum(c); });
// теперь в space символы, которые и не буквы и не цифры
//а в digits все буквы и цифры
// разделяем цифры от букв
auto op = [](char c) { return isdigit(c); };
partition(digits.begin(), digits.end(), op);
//находим позицию разделения
auto pos = partition_point(digits.begin(), digits.end(), op);
//копируем от этой позиции, получаем буквы
copy(pos, digits.end(), back_inserter(alpha));
//Буквы тоже готовы. Удаляем все элементы не цифры, и остаются цифры
digits.erase(pos, digits.end());
std::cout << inputStr << endl
<< digits << endl
<< alpha << endl
<< space << endl;
Ваша программа, если и сработает правильно, выведет просто исходную строку без изменений.
А для проверки символов куда удобнее пользоваться isalpha/isdigit и прочими стандартными функциями
int main ()
{
string Str;
string Chars;
string Numbers;
string symbol = "!@#$%^&*()_+-/.<>";
string inputStr;
getline(cin, inputStr);
for (size_t i = 0; i < inputStr.size(); i++) {
if (isspace(inputStr[i]))
continue;
if (isdigit(inputStr[i]))
Numbers.push_back(inputStr[i]);
else if (isalpha(inputStr[i]))
Str.push_back(inputStr[i]);
else if (symbol.find(inputStr[i]))
Chars.push_back(inputStr[i]);
}
std::cout << Str << ',' << Chars << ',' << Numbers;
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
У меня есть два процесса Client и Server, один из них генерирует Bitmap мне нужно его передать другому процессуЯ создал между ними FileMapping
Не могу разобраться в том, как работает drag & drop в qt-ишной model-viewМне нужно реализовать перетаскивание между двумя view (QTreeView) в которых находятся...
Нужно запретить редактирование JTable, чтобы при нажатие на конкретную строку она только выделялась и можно было обработать слушателем это...
Не могу понять почему метод say(String something) не возвращает "Ты чё не знаешь, что рыбы не разговаривают?"