Я решаю следующую проблему алогрита
Первая строка ввода содержит одно целое число N (1 ≤ N ≤ 1000), которое представляет собой число следующих наборов данных. Каждый набор данных состоит из одной строки ввода, содержащей число с плавающей запятой (двойной точности), пробел и спецификацию единицы измерения для измерения, которое необходимо преобразовать. Единица измерения - это кг, фунт, л или g, относящиеся к килограммам, фунтам, литрам и галлонам соответственно.
А вот мой код.
Когда я компилирую этот код,
'прекращение вызова после выброса экземпляра
'std :: out_of_range' what (): basic_string :: erase: __pos (18446744073709551615)> this-> size () (0)
появляется эта ошибка. Я понятия не имею, почему появляется эта ошибка.
Я использую Dev c ++ и опцию компиляции в c ++ 11.
#include <iostream>
#include <cstring>
#include <sstream>
using namespace std;
string Convert(string data, int length);
int main()
{
int N;
cin>>N;
int temp(N);
string Ansarr[N];
int i=0;
while(temp>0){
string A;
cin>>A;
int len=A.length();
A=Convert(A,len);
Ansarr[i++]=A;
}
i=0;
while(N>0){
cout<<i+1<<' '<< Ansarr[i++]<<endl;
}
}
string Convert(string data, int length)
{
string Result,unit;
double ConResult;
if(data.back()=='g'){
if(data.at(length-2)=='k'){
/*kg일때*/
unit="lb";
data.pop_back();
data.pop_back();
data.pop_back();
double temp=stoi(data);
ConResult=temp*2.2046;
}
else{
/*g일때*/
unit="l";
data.pop_back();
data.pop_back();
double temp=stoi(data);
ConResult=temp*0.4536;
}
}
else if(data.at(length-1)=='b'){
/*lb일때*/
unit="kg";
data.pop_back();
data.pop_back();
double temp=stoi(data);
ConResult=temp*0.2642;
}
else{
/*ㅣ일때*/
unit="g";
data.pop_back();
data.pop_back();
double temp=stoi(data);
ConResult=temp*3.7854;
}
Result=to_string(ConResult);
Result.resize(6);
Result=Result+" "+unit;
return Result;
}