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

Поменять буквы в словах местами

15.02.2019, 20:07. Показов 2278. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста, нужна программа, которая разбивает введеный текст на блоки (размер блока указывает пользователь),
если блок заполнен не полностью добавляет пробелы в конец. Затем меняет местами буквы в порядке, который пользователь указал с клавиатуры. Например, я ввожу размер блока "3" порядок букв "2 1 3" и слово "Казино", программа разбивает слово на блоки "Каз" и "ино" затем меняет местами буквы "Акз" "Нио". Целый день сижу думаю как это сделать, но написал только это(естественно с ошибками), заранее спасибо
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// test.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
 
 
void zapol(int *b, int block_size)
{
    for (int i = 0; i < block_size; i++)
    {
        cin >> b[i];
    }
}
 
void proverka(int *b, int block_size)
{
    for (int i = 0; i<block_size; i++)
    {
        if (b[i] > block_size && b[i] == b[i])
        {
            cout << "ОШИБКА! Число больше размера блока!" << endl << endl;         
        }
        for (int j = 0; j < i; j++)
        {
            if (b[i] == b[j])
            {
                cout << "ОШИБКА! Повторяющиеся числа!" << endl << endl;             
            }
        }
    } 
}
 
 
 
int main()
{
    
        setlocale(LC_ALL, "Russian");
        int a, block_size;
        cout << "Введите размер блока :" << endl;
        cin >> block_size;
        cout << "Введите порядок символов в блоке через ПРОБЕЛ :" << endl;
        int *b = new int[];
        zapol(b, block_size);
        proverka(b, block_size);
        cout << "Введите текст :" << endl;
        string text;
        cin.ignore(32767, '\n');
        getline(cin, text);
        while (text.length() % block_size != 0)
        {
            text.append(" ");
        }
        for (int i = 0; text.length() >= i; i++)
        {
            char tmp = text[i];
            text[i] = text[b[i]];
            text[b[i]] = tmp;
            cout << tmp;
        }
        
        _getch();
        return 0;
        
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2019, 20:07
Ответы с готовыми решениями:

Поменять местами буквы в слове
Дано слово. Поменять местами его вторую и пятую буквы. С++

Поменять местами буквы в слове
Дано слово. Поменять местами первую букву из букв &quot;а&quot; и последнюю из букв &quot;о&quot;. Учесть возможность того, что таких букв в слове может не...

как в слове поменять некоторые буквы местами?
Мне нужно в слове поменять вторую и последнюю буквы местами...как это можно сделать??

7
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
16.02.2019, 05:03
выделить блоки в отдельный массив, а потом:

C++
1
2
3
4
5
6
7
8
for (auto& i : blocks) {
  string temp = i;
 
  for (int j = 0; j < block_size; ++i)
    temp[j] = i[b[j] - 1];
 
  i = temp;
}
ну или на ходу в строке выделять по блоку, а потом так же переставлять буквы
0
0 / 0 / 0
Регистрация: 28.12.2015
Сообщений: 25
16.02.2019, 16:38  [ТС]
ReDoX, выделил блоки в отдельный массив и происходит такая ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
string blocks[100];
        int l = 0;
        int r = block_size;
        for (int i = 0; i < text.length() / block_size; i++)
        {
            blocks[i] = text.substr(l, r - l);
            l = r;
            r += block_size;
            cout << blocks[i] << endl;
        }       
        for (auto& i : blocks) 
        {
            string temp = i;
 
            for (int j = 0; j < block_size; j++)
                temp[j] = i[b[j] - 1];
 
            i = temp;
        }
Миниатюры
Поменять буквы в словах местами  
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
17.02.2019, 06:05
capret, все работает:

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <bits/stdc++.h>
 
using namespace std;
 
#define int long long int
 
void zapol(int *b, int block_size) {
  for (int i = 0; i < block_size; i++) {
    cin >> b[i];
  }
}
 
void proverka(int *b, int block_size) {
  for (int i = 0; i < block_size; i++) {
    if (b[i] > block_size && b[i] == b[i]) {
      cout << "ОШИБКА! Число больше размера блока!" << endl << endl;
    }
    for (int j = 0; j < i; j++) {
      if (b[i] == b[j]) {
        cout << "ОШИБКА! Повторяющиеся числа!" << endl << endl;
      }
    }
  }
}
 
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout.precision(9);
 
  setlocale(LC_ALL, "Russian");
  int a, block_size;
  cout << "Введите размер блока :" << endl;
  cin >> block_size;
  cout << "Введите порядок символов в блоке через ПРОБЕЛ :" << endl;
  int *b = new int[block_size];
  zapol(b, block_size);
  proverka(b, block_size);
  cout << "Введите текст :" << endl;
  string text;
  cin.ignore(32767, '\n');
  getline(cin, text);
  while (text.length() % block_size != 0) {
    text.append(" ");
  }
  string blocks[100];
  int l = 0;
  int r = block_size;
  for (int i = 0; i < text.length() / block_size; i++) {
    blocks[i] = text.substr(l, r - l);
    l = r;
    r += block_size;
    cout << blocks[i] << endl;
  }
  for (auto &i : blocks) {
    string temp = i;
 
    for (int j = 0; j < block_size; j++)
      temp[j] = i[b[j] - 1];
 
    i = temp;
  }
 
  return 0;
}
exit code is 0, поэтому никакой ошибки нет

P.S. если бы вы заглянули в используемый код, то нашли бы ошибку в вводимых данных
Миниатюры
Поменять буквы в словах местами  
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
17.02.2019, 12:55
ReDoX, все равно программа выдает ошибку:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
 
#define int long long int
 
void zapol(int *b, int block_size) {
    for (int i = 0; i < block_size; i++) {
        cin >> b[i];
    }
}
 
void proverka(int *b, int block_size) {
    for (int i = 0; i < block_size; i++) {
        if (b[i] > block_size && b[i] == b[i]) {
            cout << "ОШИБКА! Число больше размера блока!" << endl << endl;
        }
        for (int j = 0; j < i; j++) {
            if (b[i] == b[j]) {
                cout << "ОШИБКА! Повторяющиеся числа!" << endl << endl;
            }
        }
    }
}
 
int32_t main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cout.precision(9);
 
    setlocale(LC_ALL, "Russian");
    int a, block_size;
    cout << "Введите размер блока :" << endl;
    cin >> block_size;
    cout << "Введите порядок символов в блоке через ПРОБЕЛ :" << endl;
    int *b = new int[block_size];
    zapol(b, block_size);
    proverka(b, block_size);
    cout << "Введите текст :" << endl;
    string text;
    cin.ignore(32767, '\n');
    getline(cin, text);
    while (text.length() % block_size != 0) {
        text.append(" ");
    }
    string blocks[100];
    int l = 0;
    int r = block_size;
    for (int i = 0; i < text.length() / block_size; i++) {
        blocks[i] = text.substr(l, r - l);
        l = r;
        r += block_size;
        cout << blocks[i] << endl;
    }
    for (auto &i : blocks) {
        string temp = i;
 
        for (int j = 0; j < block_size; j++)
            temp[j] = i[b[j] - 1];
 
        i = temp;
    }
    system("pause");
    return 0;
}
Миниатюры
Поменять буквы в словах местами  
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
17.02.2019, 16:47
isaak, я в линуксе работаю: Eclipse + g++ 8.2.1. Возможно, где-то есть выход за пределы, но программа почему-то не крашится.

См. скрин

Проблема не в моем коде явно. Человек попросил перернуть блоки, я перевернул, кто знал, что блоки неправильно выделяются. Есть блоки 0 размера, поэтому и выход за границы
Миниатюры
Поменять буквы в словах местами  
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
17.02.2019, 17:47
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
#include <iostream>
using namespace std;
 
int main()
{
  string s,word;
  int blok,*bukva;
  size_t i=0,count=0;
 
  getline(cin,s);//ввод текста
 
  cin >>blok;//ввод размера блока
 
  bukva=new int[blok]; //порядок чередования букв в блоке
  for(int j=0;j<blok;j++)
    cin>>bukva[j];
 
  while(s.size()%blok!=0)
     s+=' ';
  while(s[i]!='\0'){
     word+=s[i];
     count++;
     if(count==blok){
       for(int j=0;j<blok;j++)
           cout<<word[bukva[j]-1];
       cout<<"\n";
       word="";
       count=0;
       }
       i++;
     }
 
   system("pause");
   return 0;
}
0
90 / 125 / 28
Регистрация: 17.10.2010
Сообщений: 1,321
17.02.2019, 19:45
повар1, та же самая ошибка тоже под linux ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2019, 19:45
Помогаю со студенческими работами здесь

Поменять местами первую и последнюю буквы слов
поменять местами буквы в словах строки c++(вводить можно только пробелы и латинские буквы) я обозначу _пробелом чтобы было видно сколько...

Поменять в каждом слове местами первую и последнюю буквы.
Помогите написать программу c++ Дана строка. Группы символов, разделенные пробелами (одним или несколькими) и не содержащие пробелов...

Поменять местами первую и последнюю буквы каждого слова
8. З клавіатури вводиться текстовий рядок. Скласти програму, яка міняє місцями першу і останню літери кожного слова. AS??? П.1.4....

Строки. Поменять в каждом слове местами первую и последнюю буквы
Дана строка. Группы символов, разделенные пробелами (од- ним или несколькими) и не содержащие пробелов внутри себя, будем называть словами....

Работа со строками (поменять местами первую и последнюю буквы в слове)
Не подскажите как в слове,работая со строкой поменять местами первую и последнюю буквы?


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru