0 / 0 / 0
Регистрация: 30.01.2016
Сообщений: 1
1

функция, которая обрезает пробелы в конце переданной ей строки

30.01.2016, 23:22. Показов 6239. Ответов 7

Ребята, здравствуйте,

Подскажите, пожалуйста, как написать функцию (на С/С++), которая обрезает пробелы в конце переданной ей строки.
Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов,
оптимизирована по количеству обращений к памяти. Сигнатура: void TrimRight( char *s )



И мне не очень понятно, что значит "функция должна быть оптимизирована по количеству обращений к памяти".

Буду очень признательна за помощь.

Заранее спасибо,

Марина
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2016, 23:22
Ответы с готовыми решениями:

Написать функцию, которая обрезает пробелы в конце переданной ей строки
Здравствуйте, нужно написать функцию, которая обрезает пробелы в конце переданной ей строки....

Напишите функцию ,которая удаляет из переданной ей символьной строки все лишние пробелы, заменяя повторяющиес
:) Напишите функцию ,которая удаляет из переданной ей символьной строки все лишние пробелы, заменяя...

Функция удаляющая пробелы в начале и в конце строки
Разработайте функцию std::string TrimBlanks(std::string const& str), выполняющую отрезание...

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

7
5 / 3 / 1
Регистрация: 06.11.2014
Сообщений: 33
30.01.2016, 23:27 2
"Очень длинные строки" в оператику помещаются?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.01.2016, 23:34 3
1. Берем строку.
2. Находим длину (strlen).
3. Ищем с конца первый непробельный символ.
4. Ставим за ним '\0'.
5. ???
6. PROFIT
0
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
30.01.2016, 23:39 4
Вот вам мой велосипед:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <cstring>
 
using namespace std;
 
void TrimRight(char* s)
{
    int j = 1;
 
    while (s[strlen(s) - j] == ' ')
        j++;
 
    s[strlen(s) - j + 1] = '\0';
}
 
int main()
{
    char somestr[] = "abc                                                                      ";
    TrimRight(somestr);
    cout << somestr;
    return 0;
}
Добавлено через 24 секунды
Tulosba, (((((
0
17110 / 9129 / 2236
Регистрация: 30.01.2014
Сообщений: 15,916
30.01.2016, 23:44 5
Lawliet1, strlen делать столько раз - это очень расточительно Учитывая, что нужно писать
Цитата Сообщение от Марина Егина Посмотреть сообщение
в расчёте на работу с очень длинными строками
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
30.01.2016, 23:44 6
Lawliet1, никогда не используй strlen в цикле по строке. Это делает сложность квадратичной.
Ну и вывод строки с усеченными пробелами в конце визуально в консоли всё равно не будет отличаться от такой же строки с пробелами
0
31 / 34 / 18
Регистрация: 30.09.2011
Сообщений: 202
30.01.2016, 23:54 7
DrOffset, Tulosba, ок, дубль 2:
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 <cstring>
 
using namespace std;
 
void TrimRight(char* s)
{
    int j = strlen(s);
 
    while (true)
    {
        if (s[--j] == ' ')
            continue;
        break;
    }
 
    s[j+1] = '\0';
}
 
int main()
{
    char somestr[] = "abc                                                                      ";
    TrimRight(somestr);
    cout << somestr;
    return 0;
}
Ну и вывод строки с усеченными пробелами в конце визуально в консоли всё равно не будет отличаться от такой же строки с пробелами
специально не ставил
C++
1
cout << endl;
в конце, чтоб было видно, что пробелов нет (результат работы программы: abcДля продолжения бла-бла-бла)
0
Эксперт С++
8720 / 4300 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
31.01.2016, 00:06 8
Цитата Сообщение от Марина Егина Посмотреть сообщение
Подскажите, пожалуйста, как написать функцию (на С/С++), которая обрезает пробелы в конце переданной ей строки.
Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов,
оптимизирована по количеству обращений к памяти. Сигнатура: void TrimRight( char *s )
http://rextester.com/NBS47707

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
#include <algorithm>
#include <iostream>
#include <string>
#include <locale>
 
const auto spaces_ = [](const char ch)
{
    static std::locale loc("");
    return std::isspace(ch, loc);
};
 
 
// удаляем пробельные символы слева
std::string& ltrim(std::string& str)
{
    const auto it = std::find_if_not(str.begin(), str.end(), spaces_);
    str.erase(str.begin(), it);
    return str;
}
 
// удаляем пробельные символы справа
std::string& rtrim(std::string& str)
{
    const auto it = std::find_if_not(str.rbegin(), str.rend(), spaces_).base();
    str.erase(it, str.end());
    return str;
}
 
// удаляем пробельные символы и слева, и справа
std::string& trim(std::string& str) 
    { return ltrim(rtrim(str)); }
 
 
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    {
        std::string example = "   text  ";
        std::cout << "удаляем пробелы слева ............ '" << ltrim(example) << "'\n";
    }
    
    {
        std::string example = "   text  ";
        std::cout << "удаляем пробелы справа ........... '" << rtrim(example) << "'\n";
    }
 
    {
        std::string example = "   text  ";
        std::cout << "удаляем пробелы слева и справа ... '" << trim(example) << "'\n";
    }
}
Добавлено через 3 минуты
Цитата Сообщение от Марина Егина Посмотреть сообщение
Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов,
Оптимизация простой функции
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2016, 00:06
Помогаю со студенческими работами здесь

Удалить повторяющиеся пробелы, также пробелы в начале и в конце строки (ассемблерная вставка)
Написать ассемблерную вставку, реализующую следующую обработку строки: согласно варианту. Оформить...

Функция, которая удаляет начальные и конечные пробелы из строки
Написать функцию, которая удаляет начальные и конечные пробелы из строки, полученной в качестве...

Функция которая удаляет начальные и конечные пробелы из строки, полученной в качестве аргумента
Нужен код без использования strlen

Функция, которая обрезает все символы не являющиеся прописными буквами кирилицы
Хочу поделиться функцией, которая обрезает все символы не являющиеся прописными буквами кириллицы...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru