копирование элемента из списка <string>mylist в строку mystr - PullRequest
0 голосов
/ 14 сентября 2011
list<string> mylist;
mylist.push_back("random stuff");
list<string>::iterator it;
it=mylist.begin();
string mystr;
//and this doesn't work:
mystr=*it;

Допустим, у меня есть list<string> mylist, и у него есть 3 предмета.Поскольку я не могу работать с символами каждого элемента, я должен скопировать элемент, который я хочу, в простую строку или буфер символов.Но я вообще не могу найти выход, я пробовал и с указателями на массивы.Так есть ли способ скопировать эти элементы из списка?

Редактировать: Да, извините, пересмотрел мой код, проект, и обнаружил, что ошибка была где-то еще, я копировал из listmylist встрока mystr, с помощью итератора, и я использовал цикл for, у которого было условие останавливаться, когда он встречал символ '\ 0', вставленный, когда я копировал его, он не копировал '\ 0' вмоя строка, поэтому, в конце концов, мне пришлось поставить ее вручную, чтобы функция не работала вне строки. Хороший код:

    string temp;
    list<string>::iterator it;
    it=mylist.begin();//let's say myslist has "random stuff"
    temp=*it;//this does not copy the '\0'
    temp+='\0';//so i add it myself 
    for(int n(0);temp[n]!='\0';n++)//now the for loop stops properly
        cout<<temp[n];

Ответы [ 3 ]

1 голос
/ 14 сентября 2011

Если вы хотите символы из строки:

for (std::string::iterator it=mystr.begin(); it!=mystr.end(); it++)
{
     char ch = *it;
     // do something with the character?
}

Если вы хотите передать строку как строку C (с нулевым символом в конце), используйте

mystr.c_str()
0 голосов
/ 14 сентября 2011

Возможно, вы ищете

list<string> mylist;
mylist.push_back("random stuff");
list<string>::iterator it = it=mylist.begin();
string& mystr = *it; // Note the &

Тип string& является ссылкой на строку.Он вводит новое имя для первого элемента списка.Ну, по крайней мере, то, что в настоящее время является первым элементом.Конечно, вы могли бы сделать mylist_push_front("Hi There");, а mystr все равно было бы "случайным материалом".Но если вы сейчас скажете mystr = "Not so random stuff";, вы измените строку внутри списка.

Обратите внимание, что это явно , а не копия.

Небольшое предупреждение: mystr магическим образом не поддерживает живость струны.Если вы удалите базовую строку из списка, вы также должны прекратить использование mystr.

0 голосов
/ 14 сентября 2011

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

for (list<string>::iterator iter = mylist.begin(); iter != mylist.end(); ++iter)
{
    char c = (*iter)[0];  //this is the first character.
}

Вы можете циклически проходить по строке даже с помощью итератора, строки также имеют их :) Хотя строки поддерживают итераторы с произвольным доступом, так что вы можете просто обращаться к ним как к массивам, таким как c-строка, как я показал в for цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...