我的功能问题是我应该生成一个随机字符串向量。但是,我得到的只是向量中的第一个元素是随机的,其余的是空的。这是代码:
void losuj(vector <string> &vec, int ile){
int i, j;
string str;
stringstream ss;
char c;
for(i=0; i<ile; i++){
for(j=0; j<5; j++){
c= rand()%25 + 97;
ss << c;
}
ss >> str;
vec.push_back(str);
ss.str().clear();
str.clear();
}
}
有什么可能出错的想法?
答案 0 :(得分:1)
首先,正如WhozCraig所说,你不需要在这里使用stringstream
。 std::string
提供您需要的一切。
您的代码无效的原因是您的eof
bit是通过operator>>
设置的。调用stringstream::clear()
会重置该位并使该流再次可用。
这是您的代码稍作修改,工作正常。我还添加了Thomas Matthews建议的修复:
void losuj(vector <string> &vec, int ile)
{
int i, j;
string str;
char c;
for(i=0; i<ile; i++)
{
for (j=0; j<5; j++)
{
c = rand() % 26 + 'A';
str += c;
}
vec.push_back(str);
str.clear();
}
}
答案 1 :(得分:0)
您必须重置字符串流的状态,因为您已达到eof
:
ss.clear();