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];
答案 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
。