С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142

В заданном тексте вставить пробелы между буквами

02.07.2018, 21:15. Показов 7253. Ответов 30

Студворк — интернет-сервис помощи студентам
Добрый вечер всем. Как мне для данной проги учесть пробелы между буквами в строке? (функция space_between_letters) Со строкой я на Вы, поэтому прошу помощи с работою над нею:

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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
 
using namespace std;
 
enum Mask
{
    UPPER = 128,
    SPACE_BETWEEN_LETTERS = 64,
    NEWLINE = 32,
};
 
void uppercase(char str[]) {
    char* step = str;
    while (*step != '\0') {
        *step = toupper(*step); // позволяет сделать буквы заглавными
        ++step;
    }
}
 
void space_between_letters(char str[]) {
    // пробелы между буквами
 
 
 
 
 
}
 
 
 
 
 
 
 
void main() {
 
    unsigned char settings = 0;
    int user_choise;
    char *str = new char[254];
    strcpy(str, "Some text for test");
    settings = Mask::UPPER | Mask::SPACE_BETWEEN_LETTERS; // == user_choise
 
 
 
    if ((settings & Mask::UPPER) == Mask::UPPER) {
        uppercase(str);
    }
 
    if ((settings & Mask::SPACE_BETWEEN_LETTERS) == Mask::SPACE_BETWEEN_LETTERS) {
        space_between_letters(str);
    }
 
 
 
 
 
 
 
    cout << str << endl;
 
    delete[] str;
    system("pause");
}
Добавлено через 1 час 36 минут
Нарыл функцию isalnum(), которая проверяет, является ли символом то, что содержится в теле функции или нет, реализовал проверку, все дела и получилось, только теперь появляется помимо строки, которая вышла, строка, которая была. Что мне с этим делать? Сам код:
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
70
71
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
 
using namespace std;
 
enum Mask
{
    UPPER = 128,
    SPACE_BETWEEN_LETTERS = 64,
    NEWLINE = 32,
};
 
void uppercase(char str[]) {
    char* step = str;
    while (*step != '\0') {
        *step = toupper(*step); // позволяет сделать буквы заглавными
        ++step;
    }
}
 
void space_between_letters(char str[]) {
    // пробелы между буквами
    char* step = str;
    while (*step != '\0') {
        if (isalnum(*step))
        {
            cout << *step << " ";
        }
 
        ++step;
    }
 
 
 
 
}
 
 
 
 
 
 
 
void main() {
 
    unsigned char settings = 0;
    char user_choise; // isalnum(str) ? cout << ""; :  
    char *str = new char[254];
    strcpy(str, "Some text for test");
    settings = Mask::UPPER | Mask::SPACE_BETWEEN_LETTERS; // == user_choise
 
    if ((settings & Mask::UPPER) == Mask::UPPER) {
        uppercase(str);
    }
 
    if ((settings & Mask::SPACE_BETWEEN_LETTERS) == Mask::SPACE_BETWEEN_LETTERS) {
        space_between_letters(str);
    }
 
 
 
 
 
 
 
    cout << str << endl;
 
    delete[] str;
    system("pause");
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.07.2018, 21:15
Ответы с готовыми решениями:

Выделить в тексте лишние пробелы между словами
ЕЩе одна задачка из Павловской... Прошу помощи!!! Если вам лень решать всю задачу, то меня очень интересует второй пункт... Но буду рад...

В любом тексте между 3 и 4 словом вставить новое слово
Ребят,помогите пожалуйста,в работе со строками совсем не шарю. Задание:в любом тексте между 3 и 4 словом вставить новое слово(работать с...

В тексте вставить между словами вместо одного пробела запятую и пробел
Доброго времени суток! В С++ я полный ноль. Пытаюсь разобраться со строками. Не могу понять, как это реализовать. Вот что есть сейчас: ...

30
 Аватар для Bring
133 / 53 / 43
Регистрация: 09.05.2015
Сообщений: 565
02.07.2018, 22:45
Цитата Сообщение от N0VY Посмотреть сообщение
isalnum()
наройте функцию isalpha()
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
03.07.2018, 09:31  [ТС]
isalpha мне ни к чему: нужен isspace что-бы после пробела тоже выводилась строка, я полагаю.
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 09:38
N0VY, сделать проверку if(char[] == ' ')
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
03.07.2018, 09:57  [ТС]
А не проще использовать isspace? Меньше писать придётся (чуть-чуть, но всё-таки)
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 10:05
N0VY, думаю преподавателю будет приятнее увидеть проверку которую он сам сделал,а не функцию которую просто использовал с библиотеки, всё таки не нужно писать целые классы, достаточно всего ничего написать
C++
1
if(char[] == ' ')
плюс сравни:
C++
1
if(char[0] == ' ')
и
C++
1
if (IsSpase(char[0]))
Цитата Сообщение от N0VY Посмотреть сообщение
Меньше писать придётся
1
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
03.07.2018, 10:44  [ТС]
хмм.. согласен.. Рассмотрю.

Добавлено через 19 минут
То же, что и выходило в прошлой программе. Блестяще. А теперь скажите мне пожалуйста: где мне делать си-аут так, что-бы выводило только видоизменённый текст? Создать ещё одну строку и скопировать с помощью strncpy (ну, как угодно) эту видоизменённую строку в новую строку и сделать си-аут там? Или есть метод попроще?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.07.2018, 12:29
Цитата Сообщение от k0vpack Посмотреть сообщение
преподавателю будет приятнее увидеть проверку которую он сам сделал,а не функцию которую просто использовал с библиотеки
k0vpack, моё имхо: в печку такого преподавателя. Такой подход вырабатывает дурные привычки писать корявые самопальные велосипеды там, где они не нужны. Тем более, если техзаданием не оговорено явно, какими инструментами можно пользоваться, то надо по возможности, использовать библиотечные решения. Велосипеды нужно писать только тогда, когда явно оговаривается "напишите собственную реализацию библиотечной функции такой-то". Ну и когда просто любопытно самому написать свою версию (когда пишешь код для себя, для тренировки).

Добавлено через 5 минут
Цитата Сообщение от N0VY Посмотреть сообщение
А не проще использовать isspace?
N0VY, проще.

Добавлено через 43 секунды
Цитата Сообщение от N0VY Посмотреть сообщение
учесть пробелы между буквами в строке?
N0VY, что значит "учесть"? Посчитать количество пробелов в строке? Определить имеются ли пробелы в заданном интервале? Определить позицию пробельного символа?
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 13:28
gru74ik,
Цитата Сообщение от gru74ik Посмотреть сообщение
Такой подход вырабатывает дурные привычки
если компилятор будет лезть в библиотеку то программа будет дольше выполняться (тем более для каждого символа), а если есть возможность быстро написать функцию в которой невозможно ошибиться то зачем опускать такой шанс?

Добавлено через 1 минуту
Цитата Сообщение от gru74ik Посмотреть сообщение
А не проще использовать isspace?
N0VY, проще.
на 100 % уверен что не проще
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.07.2018, 14:40
k0vpack, ну-ну... Если Вы правы, значит Бьярне Страуструп либо лжёт, либо впал в маразм:
Цитата Сообщение от Bjarne Stroustrup
If the standard library provides a component that addresses a problem, it is almost always better to use that component than to build your own.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.07.2018, 14:46
Цитата Сообщение от gru74ik Посмотреть сообщение
If the standard library provides a component that addresses a problem, it is almost always better to use that component than to build your own.
наверно и из этого правила есть исключения?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.07.2018, 14:50
Цитата Сообщение от _stanislav Посмотреть сообщение
наверно и из этого правила есть исключения?
_stanislav, несомненно. Поэтому Страуструп и написал "almost always". Кстати, я о них (исключениях) упомянул:
Цитата Сообщение от gru74ik Посмотреть сообщение
Велосипеды нужно писать только тогда, когда явно оговаривается "напишите собственную реализацию библиотечной функции такой-то". Ну и когда просто любопытно самому написать свою версию (когда пишешь код для себя, для тренировки).
Добавлено через 42 секунды
Есть ещё один случай: когда Ваш велосипед лучше библиотечного решения. Но такое случается нечасто. И это не про код, который пишут новички.
0
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 18:17
gru74ik,
Цитата Сообщение от gru74ik Посмотреть сообщение
когда Ваш велосипед лучше библиотечного решения
думаю в данном случае что мой велосипед что библиотечное решения, они одинаковы, только на библиотечное решения будет тратиться время захода в функцию и ожидания возврата, это же не проверка на несколько символов, а только на один, пробел он и в африке пробел
1
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
03.07.2018, 18:33
Цитата Сообщение от k0vpack Посмотреть сообщение
думаю в данном случае что мой велосипед что библиотечное решения, они одинаковы, только на библиотечное решения будет тратиться время захода в функцию и ожидания возврата, это же не проверка на несколько символов, а только на один, пробел он и в африке пробел
k0vpack, согласен. В данном случае без разницы как делать. Мне почему-то показалось, что Вы предлагаете топик-стартеру свои функции вместо библиотечных писать. А сейчас пришёл с работы, отдохнул немного, и понял, что я тут из-за одного маленького условия в if устроил бурю в стакане. Прошу прощения.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
04.07.2018, 14:23  [ТС]
Действительно... А теперь кончаем споры и ближе к делу: что предпринимать?

Добавлено через 31 минуту
gru74ik, учесть пробелы в строке == поставить их между буквами (привык так печатать, сори )

Добавлено через 2 минуты
IsSpace, а не IsSpase, кстати говоря..
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.07.2018, 14:53
N0VY, Вы задачу можете нормально сформулировать?

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от N0VY Посмотреть сообщение
IsSpace, а не IsSpase, кстати говоря..
И даже isspace, кстати говоря

0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
04.07.2018, 16:03  [ТС]
Условия не читали что-ли? Ладно, скажу ещё раз: мне нужно сделать функцию, которая добавляет пробел между буквами, например текст "Sample Text" превращает в "S a m p l e T e x t". И это делается через битовые операции.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.07.2018, 16:48
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
void add_spaces_between_letters(std::string & str)
{
    for (size_t i = 1, limit = str.size()*2-1; i < limit; i += 2)
    {
        if (i < str.size() && str.at(i) != ' ')
            str.insert(i, " ");
    }
}
 
int main()
{
    std::string phrase;
    getline(std::cin, phrase);
    add_spaces_between_letters(phrase);
    std::cout << phrase;
}
1
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
05.07.2018, 14:46  [ТС]
getline - это всё равно, что cin? Возникают вопросы по механизму данной проги: можете объяснить его? Будьте добры
0
475 / 427 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
05.07.2018, 15:00
N0VY, getline считывает строку целиком до enter, когда cin до первого пробела
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2018, 15:00
Помогаю со студенческими работами здесь

В произвольном тексте вставить между вторым и третьим словом новое слово
&quot;В произвольном тексте вставить между вторым и третьим словом новое слово.&quot; Помоги пожалуйста)) С коментариями если можно для...

Удалить все символы в строке, не являющиеся буквами и заменить множественные пробелы одним
Ребята,буду запредельно благодарен.

Между буквами в тексте вставить определенный символ
Вобщем задача такая, например есть тест &quot;Всем привет&quot; нужно после нажатия кнопки или даже в момент печатания сделать его таким: В*с*е*м...

Пробелы между буквами после копирования из Маткада в Опенофис!
после копирования из маткада в опенофис появляются пробелы между буквами, что никак не годится. Знаю, есть способ вручную уменьшать...

В заданном тексте удалить из текста пробелы
строки 1)Дана строка состоящая из слов, разделенных пробелами. Посчитать количество сдвоенных букв во ведённом тексте. 2)2. В заданном...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru