将元素从列表<string> mylist复制到字符串mystr </string>

时间:2011-09-13 20:27:28

标签: c++ arrays string list

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个项目。由于我不能处理每个元素的字符,我必须将我想要的项目复制到一个简单的字符串或一个char缓冲区。但我找不到任何方法,我也试过指向数组的指针。 那么有没有办法将这些项目从列表中复制出来?

编辑: 是的抱歉,重新访问我的代码,项目,并发现错误是其他的,我是从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 个答案:

答案 0 :(得分:1)

如果你想要字符串中的字符:

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

如果要将字符串作为C(零终止)字符串传递,请使用

mystr.c_str()

答案 1 :(得分:0)

代码效果很好,输出正确的结果。此外,您可以使用这样的每个元素的字符:

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

你可以使用迭代器循环遍历字符串,字符串也可以使用它们:)虽然字符串支持随机访问迭代器,所以你可以像我在for中显示的那样访问像c-string这样的数组循环。

答案 2 :(得分:0)

您是否正在寻找

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