terminate called after throwing an instance of ‘std::logic_error’
what(): basic_string::_M_construct null not valid
The error shown is:
#include
#include
#include
using namespace std;
string getStr(string s,int i)
{
char *p=strtok((char )s.c_str()," “);
while(i>1)
{
p= strtok(NULL,” ");
i–;
}
string m=p;
return m;
}
int getint(string s)
{
int sum=0;
for(int i=0;i<s.length();i++)
{
sum=sum10+(s[i]-‘0’);
}
return sum;
}
bool numeric(const pair<string,string>& a,const pair<string,string>& b)
{
string c=a.second;
string d=b.second;
return getint©<getint(d);
}
bool lexico(const pair<string,string>& a,const pair<string,string>& b)
{
string c=a.second;
string d=b.second;
return c<d;
}
int main()
{
int n;
cin>>n;
string s[n];
for(int i=0;i<n;i++)
{
getline(cin,s[i]);
}
int key;
string rev,type;
cin>>key>>rev>>type;
pair<string,string> pr[n];
for(int i=0;i<n;i++)
{
pr[i].first=s[i];
pr[i].second=getStr(s[i],key);
}
if(type==“lexicographical”)
sort(pr,pr+n,lexico);
else
sort(pr,pr+n,numeric);
if(rev=="true")
{
for(int i=0;i<n/2;i++)
{
swap(pr[i],pr[n-1-i]);
}
}
for(int i=0;i<n;i++)
{
cout<<pr[i].first<<endl;
}
return 0;
}