С ++ скопировать список символов в строку точно, не игнорируя несколько пробелов - PullRequest
0 голосов
/ 27 мая 2020

У меня есть список символов, L:

{'h','e','l','l','o',' ', ' ',' ', 'm', 'y', ' ', ' ',' ', 'n','a','m','e'};

Я хочу скопировать его в строку. Я хочу сохранить тройные пробелы и получить строку S ниже:

"hello   my   name"

Я пробовал это:

string S(L.begin(), L.end()); 

, но он каким-то образом удаляет тройные пробелы и дает мне одиночные пробелы, и S становится: "Привет, меня зовут". Я пробовал повторять один за другим:

string S = "";
for (auto it = L.begin(); it!=L.end(); it++){
   S+=*it;
}

Я все еще получаю «привет, мое имя» с одиночными пробелами. Я попытался сохранить список в векторе символов, а затем превратить его в строку, перебирая вектор и возвращаясь в строку один за другим, но по-прежнему игнорирует несколько пробелов. Как мне сказать компьютеру скопировать символы из списка в строку дословно, независимо от того, сколько последовательных пробелов существует. Даже если это просто список пробелов, я бы хотел получить строку пробелов. Любая помощь?

См. Мой код ниже:

int main() {
    list<char> L {'h', 'e', 'l', 'l', 'o', ' ', ' ', ' ', 'm', 'y', ' ', ' ', ' ', 'n', 'a', 'm', 'e'};

    string S_attempt1(L.begin(), L.end());

    string S_attempt2 = "";
    for (auto it = L.begin(); it != L.end(); it++){
        S_attempt2+=*it;
    }

    cout << S_attempt1 << endl;
    cout << S_attempt2 << endl;
}

Для некоторых строк, которые я получаю, "hello my name" вместо "hello my name"

1 Ответ

0 голосов
/ 28 мая 2020

Кажется, это работает нормально и не игнорирует пробелы:

string convertToString(list<char> lst, int size) 
{ 
    string s = ""; 
    for (auto const& i : lst) {
        s = s + i;
    }
    return s; 
} 

Выполнение этого как ...

list<char> L = {'h', 'e', 'l', 'l', 'o', ' ', ' ', ' ', 'm', 'y', ' ', ' ', ' ', 'n', 'a', 'm', 'e'}; 
int L_size = sizeof(L) / sizeof(char); 
string s_L = convertToString(L, L_size);
cout << s_L << endl;

... возвращает ожидаемый результат.

...