Удалите пробелы из станд.:: строка в C++

Это WORKS ..

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

Первый контроллер

try {
                                Stage st = new Stage();
                                 FXMLLoader loader = new FXMLLoader(getClass().getResource("/com/inty360/free/form/MainOnline.fxml"));

                                Parent sceneMain = loader.load();

                                MainOnlineController controller = loader.<MainOnlineController>getController();
                                controller.initVariable(99L);

                                Scene scene = new Scene(sceneMain);
                                st.setScene(scene);
                                st.setMaximized(true);
                                st.setTitle("My App");
                                st.show();
                            } catch (IOException ex) {
                                Logger.getLogger(LoginController.class.getName()).log(Level.SEVERE, null, ex);
                            }

Другой контроллер

public void initVariable(Long id_usuario){
        this.id_usuario = id_usuario;
        label_usuario_nombre.setText(id_usuario.toString());

    }
206
задан Steve Hanov 13 January 2009 в 15:30
поделиться

6 ответов

Лучшая вещь сделать состоит в том, чтобы использовать алгоритм remove_if и isspace:

remove_if(str.begin(), str.end(), isspace);

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

str.erase(remove_if(str.begin(), str.end(), isspace), str.end());

Мы должны также отметить, что remove_if сделает самое большее одну копию данных. Вот демонстрационная реализация:

template<typename T, typename P>
T remove_if(T beg, T end, P pred)
{
    T dest = beg;
    for (T itr = beg;itr != end; ++itr)
        if (!pred(*itr))
            *(dest++) = *itr;
    return dest;
}
239
ответ дан Matt Price 4 November 2019 в 14:22
поделиться
std::string::iterator end_pos = std::remove(str.begin(), str.end(), ' ');
str.erase(end_pos, str.end());
94
ответ дан Arno 4 November 2019 в 14:22
поделиться

От gamedev

string.erase(std::remove_if(string.begin(), string.end(), std::isspace), string.end());
35
ответ дан Anthony 4 November 2019 в 14:22
поделиться

Можно ли использовать Строковый Алгоритм Повышения? http://www.boost.org/doc/libs/1_35_0/doc/html/string_algo/usage.html#id1290573

erase_all(str, " "); 
30
ответ дан Nemanja Trifunovic 4 November 2019 в 14:22
поделиться

Я боюсь, что это - лучшее решение, о котором я могу думать. Но можно использовать резерв (), чтобы предварительно выделить минимальную необходимую память заранее для ускорения вещей немного. Вы закончите с новой строкой, которая, вероятно, будет короче, но это поднимает тот же объем памяти, но Вы избежите перераспределений.

РЕДАКТИРОВАНИЕ: В зависимости от Вашей ситуации это может подвергнуться меньше служебному, чем смешивающиеся символы вокруг.

необходимо попробовать разные подходы и видеть то, что является лучшим для Вас: у Вас не могло бы быть проблем производительности вообще.

-3
ответ дан jww 4 November 2019 в 14:22
поделиться

Для обрезки используйте алгоритмы повышения строки :

#include <boost/algorithm/string.hpp>

using namespace std;
using namespace boost;

// ...

string str1(" hello world! ");
trim(str1);      // str1 == "hello world!"
15
ответ дан 23 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: