Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Stringstreams不工作c++;_C++ - Fatal编程技术网

C++ Stringstreams不工作c++;

C++ Stringstreams不工作c++;,c++,C++,我试图解决第482个UVA问题(排列数组),但我想问的不是解决方案,而是为什么我的代码中的stringstream不能像我期望的那样工作 #include <cstdio> #include <iostream> #include <cstdlib> #include <sstream> #include <vector> using namespace std; string urutan,nilai,T; float zzz;

我试图解决第482个UVA问题(排列数组),但我想问的不是解决方案,而是为什么我的代码中的stringstream不能像我期望的那样工作

#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;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
弦乌鲁坦,尼莱,T;
浮动zzz;
内拉拉,a;
int main()
{
矢量线;
向量数;
矢量结果;
stringstream ss1(乌鲁坦)、ss2(尼莱);
getline(cin,T);
a=atoi(T.c_str());
而(一)
{
getline(cin,乌拉圭);
getline(cin,nilai);
拉拉=0;
而(ss1>>zzz)
{
线。推回(zzz);
拉拉++;
}
而(ss2>>zzz)
{
数字。推回(zzz);
}
结果:调整大小(LALA);
for(int i=0;icout构造字符串流所用的字符串未被引用;它已被复制。您正在将空字符串加载到流中,然后在读取数据时不对流进行任何更改。将流构造移动到循环中:

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)
矢量线;
向量数;
矢量结果;
stringstream ss1(urutan),ss2(nilai);//移动此
getline(cin,T);
a=atoi(T.c_str());
而(一)
{
getline(cin,乌拉圭);
getline(cin,nilai);
拉拉=0;
而(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)
矢量线;
向量数;
矢量结果;
getline(cin,T);
a=atoi(T.c_str());
而(一)
{
getline(cin,乌拉圭);
getline(cin,nilai);
拉拉=0;
stringstream ss1(乌鲁坦),ss2(尼莱);//移到这里
而(ss1>>zzz)

我建议阅读以更好地了解如何调试此文件。您没有加载包含任何内容的字符串流。在使用
getline()加载字符串之前,您正在使用空的
std::string对其进行初始化
。加载到字符串流中的字符串不是通过引用加载的。请在
getline
之后加载
ss1
。请注意,在使用之前而不是在最顶端声明stringstreams可以防止此错误。@user3022713不客气。您甚至可以将ss2的输入和字符串流向下移动到e代码,但我把它留给你。现在应该可以用了。