Само задание полностью выглядит так : "через одну пустую строку предлагает ввести строку A (ввод осуществляется нажатием клавиши Enter), а затем строку В. После этого необходимо вывести обработанные строки. Если строки состоят из одних и тех же символов, то удалить из B латинские и русские буквы; в остальных случаях упорядочить символы A в порядке, обратном к алфавитному". У меня остались проблемы лишь с упорядочиванием символов A в порядке, обратном к алфавитному c++ P.S подключение других библиотек не рассматривается
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "Russian");
string a,b;
cout << "Введите строку А : ";
getline(cin,a);
cout << "Введите строку B : ";
getline(cin,b);
int j = a.size();
char * writable = new char[a.size() + 1];
cout << "А : " << a << endl;
cout << "B : " << b << endl;
const char*str1 = a.c_str();
const char*str2 = b.c_str();
int count1[256] = { 0 };
int count2[256] = { 0 };
for (const char*pos = str1;*pos;++pos)
++count1[(unsigned char)*pos];
for (const char*pos = str2;*pos;++pos)
++count2[(unsigned char)*pos];
bool res = true;
for (int i = 0;i < 256;++i)
res = res && count1[i] == count2[i];
if (res == true)
{
for (int unsigned i = 0; i < b.size();i++)
{
char ch = b[i];
if ((((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z'))) || (((ch >= 'а') && (ch <= 'я')) || ((ch >= 'А') && (ch <= 'Я'))))
{
b.erase(i, 1);
--i;
}
}
cout << "B : " << b << endl;
res = false;
}
else
{
/*Тут как раз не могу реализовать сортировку символов строки А в
обратном алфавитному порядке*/
for (int i = 0; i < sizeof(writable) - 2;i++)
{
for (int j = 0; j < sizeof(writable) - 2 ;j++)
{
if (writable[j] < writable[j + 1])
{
tmp = writable[j];
writable[j] = writable[j + 1];
writable[j + 1] = tmp;
}
}
}
cout << "A : " << writable;
}
system("pause");
return 0;
}
Весь ваш код:
std::string a,b;
getline(std::cin,a);
getline(std::cin,b);
// если в строке `a` не нашли символ, который нет в строке `b`
if (a.find_first_not_of(b) == std::string::npos) {
for (size_t i = 0; i < b.length(); ++i)
//проверяем является ли символ буквой
if(isalpha(b[i])) //функцию можете писать сами
b.erase(i--, 1);
std::cout << a << std::endl << b;
}
else { //сортируем в обратном порядке
sort(a.rbegin(), a.rend()); // функцию сортировки можете написать сами
std::cout << a;
}
P.S. как сортировать последовательность, есть многочисленные способы, примеры которых вы найдете в инете и в SO
. И, еще: когда работаете с std::string
, не пытайтесь переходить на С_строку, если в этом нет необходимости. А то вы сразу переходите работать с массивом, игнорируя преимущества и возможности std::string
Пример сортировки символьной строки(если пробелы не учитывются).
Каждый сивол помещаем в последовательность по индексу своего int_type
потом, начиная с конца, присваиваем елементам исходной строки все непробелы:
std::string t(255, ' ');
const size_t sz = a.length();
for(size_t i = 0; i < sz; ++i)
t[+a[i]] = a[i]; // +a[i] то же, что int(a[i])
//теперь в t элементы распологаются в возрастающем порядке
//не считая пробелы вытаскиваем с конца
for(size_t i = 254, j = 0; j < sz; --i) {
if(t[i] != ' ')
a[j++] = t[i];
}
который можете написать вместо sort(a.rbegin(), a.rend());
Виртуальный выделенный сервер (VDS) становится отличным выбором
Разбираюсь с примером, но даже его скомпилировать не могу из-за того вылазит ошибка
Пишу универсальный тип данных(мини-версию) Проблема возникла при вызове getInside();
Написал некий фрагмент кода (вообще пишу решение СЛАУ методом Гаусса), при данных значениях а и b, когда k >= 2 возникает ошибка -nan(ind) и nan (когда...