Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 01.10.2021
Сообщений: 24

Пусть даны две строки str1 и str2. Выясните, можно ли из str1 путем перестановки символов получить строку str2

15.04.2022, 12:13. Показов 1082. Ответов 6

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Столкнулся с трудностями при написании программы, которая указана в заголовке.

Задача: Пусть даны две строки str1 и str2. Выясните, можно ли из str1 путем перестановки символов получить строку str2.

Искал подобные решения на просторах, чтобы понять логику, но увы, ничего подходящего не нашёл.

Помогите, пожалуйста, дополнить данный код, чтобы он решал поставленную задачу, желательно при помощи циклов с параметром и без дополнительных библиотек:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <windows.h>
#include <string>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    string s, str1, str2;
    
    int m, n;
    
    cout << "Введите 1-ую строку: " << str1;
    getline (cin, str1);
    
    cout << "Введите 2-ую строку: " << str2;
    getline (cin, str2);
    
    return 0;
}
Заранее спасибо за ответ!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.04.2022, 12:13
Ответы с готовыми решениями:

Выяснить, можно ли из строки str1 получить строку str2 путем перестановки символов
даны две строки str1 и str2 .Выяснить,можно ли из строки str1 получить строку str2 путем перестановки символов

Функцию, которая получает два параметра str1 и str2 типа string и возвращает позицию начала последнего появления str2 в str1
Напишите функцию rightposition, которая получает два параметра str1 и str2 типа string и возвращает позицию начала последнего появления...

Заменить все вхождения str1 на str2 (str1 вводится из файла, а str2 - с клавиатуры)
заменить все вхождения подстроки str1 на подстроку str2; строка str1 вводится из файла, а строка str2 с клавиатуры {Ha C++}

6
8 / 6 / 2
Регистрация: 20.09.2020
Сообщений: 9
15.04.2022, 13:10
Приветствую!
На быструю руку написал реализацию ниже, в случае вопросов - обращайся:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
int main()
{
    auto f = [&](const std::string& obj, const std::string obj1) -> bool {
        const unsigned short max_length = 26;
        if (obj.length() != obj1.length()) {
            return false;
        }
 
        int map[max_length] = { 0 };
        for (uint8_t i = 0; i < obj1.length(); i++) {
            map[obj[i] - 'a']++;
        }
 
        for (uint8_t i = 0; i < obj1.length(); i++) {
            map[obj1[i] - 'a']--;
            if (map[obj1[i] - 'a'] < 0) {
                return false;
            }
        }
        return true;
    };
 
    std::string rhs, lhs;
 
    std::cout << "Enter first string: ";
    std::cin >> rhs;
    std::cout << "Enter second string: ";
    std::cin >> lhs;
 
    if (f(rhs, lhs))
        std::cout << "\nYes, it's possible for str1 to be rearranged to str2!" << std::endl;
    else
        std::cout << "\nNo, it's not possible for str1 to be rearranged to str2!" << std::endl;
 
    return 0;
}
1
1 / 1 / 0
Регистрация: 01.10.2021
Сообщений: 24
15.04.2022, 13:55  [ТС]
iKendle, большое спасибо за Ваш ответ!

Но мне нужно написать код с использованием библиотеки #include <string> исключительно, то есть, без неизвестных мне функций obj, auto и тому подобное.

То есть, именно так, как я начал писать:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <windows.h>
#include <string>
 
using namespace std;
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    string s, str1, str2;
    
    int m, n;
    
    cout << "Введите 1-ую строку: " << str1;
    getline (cin, str1);
    
    cout << "Введите 2-ую строку: " << str2;
    getline (cin, str2);
    
    return 0;
}
0
8 / 6 / 2
Регистрация: 20.09.2020
Сообщений: 9
15.04.2022, 14:00
Могу описать хоть обычную функцию вне main?
1
1 / 1 / 0
Регистрация: 01.10.2021
Сообщений: 24
15.04.2022, 14:03  [ТС]
Да, конечно, мне просто бы понять принцип и логику к этой задаче, буду рад любым действиям =)
0
8 / 6 / 2
Регистрация: 20.09.2020
Сообщений: 9
15.04.2022, 14:11
Лучший ответ Сообщение было отмечено TheVladokSup как решение

Решение

Да бы упростить реализацию, описываю способ решения используя готовый алгоритм сортировки строки std::sort (глянуть, как он работает, не составит Вам труда, и реализовать свой - тоже можно):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <Windows.h>
#include <string>
#include <algorithm>
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    std::string str1, str2;
 
    std::cout << "Введите 1-ую строку: " << str1;
    std::getline(std::cin, str1);
 
    std::cout << "Введите 2-ую строку: " << str2;
    std::getline(std::cin, str2);
 
    std::sort(str1.begin(), str1.end());
    std::sort(str2.begin(), str2.end());
 
    if (str1 == str2)
        std::cout << "\nДа, str1 можно получить путем перестановки символов получить строку str2!" << std::endl;
    else
        std::cout << "\nНет, str1 нельзя получить путем перестановки символов получить строку str2!" << std::endl;
    return 0;
}
1
1 / 1 / 0
Регистрация: 01.10.2021
Сообщений: 24
15.04.2022, 14:32  [ТС]
iKendle, Боже мой, сейчас поглядел содержание условия, не понимаю, как сам не додумался.

Большое Вам спасибо, всё стало понятно!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2022, 14:32
Помогаю со студенческими работами здесь

Написать функцию primer(str1, str2) удаляющую из строки str1 последнее вхождение строки str2. Функция возвращает указатель str1
помогите пожалуйста

Написать функцию replace(str1, str2,str3), заменяющая в строке str1 все вхождения строки str2 строкой str3
Написать функцию replace(str1, str2,str3), заменяющая в строке str1 все вхождения строки str2 строкой str3.Функция возвращает указатель str1

Функция replace(str1, str2, str3): заменить в строке str1 первое вхождение строки str2 строкой str3
Написать функцию replace(str1, str2, str3), заменяющую в строке str1 первое вхо-ждение строки str2 строкой str3. Функция возвращает...

Создайте из четных символов строки str1 строку str2 и из нечетных символов - строку str3
Создайте из четных символов строки str1 строку str2 и из нечетных символов - строку str3. #include &lt;stdio.h&gt; #include...

Даны три строки str1, str2, str3
Даны три строки str1, str2, str3. Заменить в строке str2 все символы, начинающиеся с подстроки str1 до конца строки на строку str3,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru