Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
1

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

02.07.2018, 21:15. Просмотров 2944. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.07.2018, 21:15
Ответы с готовыми решениями:

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

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

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

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

30
132 / 52 / 43
Регистрация: 09.05.2015
Сообщений: 562
02.07.2018, 22:45 2
Цитата Сообщение от N0VY Посмотреть сообщение
isalnum()
наройте функцию isalpha()
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
03.07.2018, 09:31  [ТС] 3
isalpha мне ни к чему: нужен isspace что-бы после пробела тоже выводилась строка, я полагаю.
0
77 / 74 / 33
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 09:38 4
N0VY, сделать проверку if(char[] == ' ')
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
03.07.2018, 09:57  [ТС] 5
А не проще использовать isspace? Меньше писать придётся (чуть-чуть, но всё-таки)
0
77 / 74 / 33
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 10:05 6
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  [ТС] 7
хмм.. согласен.. Рассмотрю.

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от gru74ik Посмотреть сообщение
А не проще использовать isspace?
N0VY, проще.
на 100 % уверен что не проще
0
Модератор
Эксперт CЭксперт С++
5022 / 2204 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
03.07.2018, 14:40 10
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
(80 / 20 || 50 / 50) = x
1600 / 1084 / 417
Регистрация: 16.08.2014
Сообщений: 4,560
Записей в блоге: 1
03.07.2018, 14:46 11
Цитата Сообщение от 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Эксперт С++
5022 / 2204 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
03.07.2018, 14:50 12
Цитата Сообщение от _stanislav Посмотреть сообщение
наверно и из этого правила есть исключения?
_stanislav, несомненно. Поэтому Страуструп и написал "almost always". Кстати, я о них (исключениях) упомянул:
Цитата Сообщение от gru74ik Посмотреть сообщение
Велосипеды нужно писать только тогда, когда явно оговаривается "напишите собственную реализацию библиотечной функции такой-то". Ну и когда просто любопытно самому написать свою версию (когда пишешь код для себя, для тренировки).
Добавлено через 42 секунды
Есть ещё один случай: когда Ваш велосипед лучше библиотечного решения. Но такое случается нечасто. И это не про код, который пишут новички.
0
77 / 74 / 33
Регистрация: 13.02.2018
Сообщений: 1,347
03.07.2018, 18:17 13
gru74ik,
Цитата Сообщение от gru74ik Посмотреть сообщение
когда Ваш велосипед лучше библиотечного решения
думаю в данном случае что мой велосипед что библиотечное решения, они одинаковы, только на библиотечное решения будет тратиться время захода в функцию и ожидания возврата, это же не проверка на несколько символов, а только на один, пробел он и в африке пробел
1
Модератор
Эксперт CЭксперт С++
5022 / 2204 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
03.07.2018, 18:33 14
Цитата Сообщение от k0vpack Посмотреть сообщение
думаю в данном случае что мой велосипед что библиотечное решения, они одинаковы, только на библиотечное решения будет тратиться время захода в функцию и ожидания возврата, это же не проверка на несколько символов, а только на один, пробел он и в африке пробел
k0vpack, согласен. В данном случае без разницы как делать. Мне почему-то показалось, что Вы предлагаете топик-стартеру свои функции вместо библиотечных писать. А сейчас пришёл с работы, отдохнул немного, и понял, что я тут из-за одного маленького условия в if устроил бурю в стакане. Прошу прощения.
0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
04.07.2018, 14:23  [ТС] 15
Действительно... А теперь кончаем споры и ближе к делу: что предпринимать?

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

Добавлено через 2 минуты
IsSpace, а не IsSpase, кстати говоря..
0
Модератор
Эксперт CЭксперт С++
5022 / 2204 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
04.07.2018, 14:53 16
N0VY, Вы задачу можете нормально сформулировать?

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

Не по теме:

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

0
8 / 8 / 6
Регистрация: 21.04.2018
Сообщений: 142
04.07.2018, 16:03  [ТС] 17
Условия не читали что-ли? Ладно, скажу ещё раз: мне нужно сделать функцию, которая добавляет пробел между буквами, например текст "Sample Text" превращает в "S a m p l e T e x t". И это делается через битовые операции.
0
Модератор
Эксперт CЭксперт С++
5022 / 2204 / 330
Регистрация: 20.02.2013
Сообщений: 5,599
Записей в блоге: 24
04.07.2018, 16:48 18
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  [ТС] 19
getline - это всё равно, что cin? Возникают вопросы по механизму данной проги: можете объяснить его? Будьте добры
0
467 / 420 / 290
Регистрация: 10.03.2015
Сообщений: 1,782
05.07.2018, 15:00 20
N0VY, getline считывает строку целиком до enter, когда cin до первого пробела
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.07.2018, 15:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.