2 개의 프로그램을 작성하고 있는데 첫 번째 프로그램에는 정수 배열이 있습니다.
vector<int> v = {10, 200, 3000, 40000};
그런 다음 벡터를 문자열로 변환합니다.
int i;
stringstream sw;
string stringword;
for (i=0;i<v.size();i++)
{
sw << v[i] << ',';
}
stringword = sw.str();
cout << "Vector in string : "<< stringword << endl;
그런 다음 파일에 씁니다.
ofstream myfile;
myfile.open ("writtentext");
myfile << stringword;
myfile.close();
출력 :
Vector in string : 10,200,3000,40000
두 번째 프로그램은 파일을 읽고 문자열을 다시 정수로 변환 한 다음 다시 벡터로 푸시합니다.
코드 :
string stringword;
ifstream myfile;
myfile.open ("writtentext");
getline (myfile,stringword);
cout << "Read From File = " << stringword << endl;
cout << "Convert back to vector = " ;
for (int i=0;i<stringword.length();i++)
{
if (stringword.find(','))
{
int value;
istringstream (stringword) >> value;
v.push_back(value);
stringword.erase(0, stringword.find(','));
}
}
for (int j=0;j<v.size();j++)
{
cout << v.at(j) << " " ;
}
문제는 첫 번째 요소 만 변환하고 밀어 낼 수 있고 나머지는 지워진다는 것입니다. 다음은 출력입니다.
Read From File = 10,200,3000,40000,
Convert back to vector = 10
내가 뭘 잘못 했어? 감사
for 루프에 문제가 있습니다.
이걸 고려하세요:
while(1) //Use a while loop, "i" isn't doing anything for you
{
//if comman not found find return string::npos
if (stringword.find(',')!=std::string::npos)
{
int value;
istringstream (stringword) >> value;
v.push_back(value);
//Erase all element including comma
stringword.erase(0, stringword.find(',')+1);
}
else
break; //Come out of loop
}
대신 std::stringstream
파일에서 다시 읽기 위해 사용 하십시오.
std::stringstream ss(stringword);
int value;
while (ss >> value)
{
v.push_back(value);
if (ss.peek() == ',')
ss.ignore();
}
for (int j=0;j<v.size();j++) //Fix variables
{
cout << v.at(j) << " " ; // Can use simply v[j]
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다