我试图解决UVA问题编号482(置换数组),但我想问的问题不是解决方案,而是为什么我的代码中的字符串流不能像我一样工作期待他们。
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <vector>
using namespace std;
string urutan,nilai,T;
float zzz;
int lalala,a;
int main()
{
vector<int> line;
vector<float> numbers;
vector<float> results;
stringstream ss1(urutan),ss2(nilai);
getline(cin,T);
a = atoi(T.c_str());
while(a--)
{
getline(cin,urutan);
getline(cin,nilai);
lalala = 0;
while(ss1 >> zzz)
{
line.push_back(zzz);
lalala++;
}
while(ss2 >> zzz)
{
numbers.push_back(zzz);
}
results.resize(lalala);
for (int i =0; i < lalala; i++)
{
results[line[i]-1] = numbers[i];
}
for(int i = 0; i < lalala; i++)
{
cout << results[i] << endl;
}
numbers.clear();
results.clear();
line.clear();
}
return 0;
}
正如您所看到的,代码上有2个字符串流操作。但是当我尝试运行时,代码似乎只是跳过stringstream和cout部分!问题是什么?
答案 0 :(得分:1)
字符串是一个用isn引用构造的字符串流;它的已复制。您正在将一个空字符串加载到您的流中,然后在读取数据时不会改变流。在循环中移动流构造:
vector<int> line;
vector<float> numbers;
vector<float> results;
stringstream ss1(urutan),ss2(nilai); // MOVE THIS
getline(cin,T);
a = atoi(T.c_str());
while(a--)
{
getline(cin,urutan);
getline(cin,nilai);
lalala = 0;
while(ss1 >> zzz)
到这里:
vector<int> line;
vector<float> numbers;
vector<float> results;
getline(cin,T);
a = atoi(T.c_str());
while(a--)
{
getline(cin,urutan);
getline(cin,nilai);
lalala = 0;
stringstream ss1(urutan),ss2(nilai); // MOVED HERE
while(ss1 >> zzz)