Here is the code:
#include<iostream>
using namespace std;
int lengthOfLastWord(string s) {
int i,j,n=0;
for(i=0;s[i]!=0;i ){
n ;
}
string s1;
for(i=n,j=0;s[i]!=' ';i--,j ){
s1[j]=s[i];
}
cout<<s1;
};
int main(){
string s;
getline(cin,s);
lengthOfLastWord(s);
}
What is the problem with the string s1
? If s1
is in the for
loop, s1
prints successfully.
CodePudding user response:
First and foremost, your lengthOfLastWord()
function doesn't return anything so have its return type be void
:
void lengthOfLastWord(string const& s) {
// ^^^^^^ Preferably use const reference here to avoid making unnecessary copies at each invocation to 'lengthOfLastWord()'
/* ... */
}
Now, the real problem is that you never initialized s1
before accessing it with s1[j]
which leads to Undefined Behavior.
So, to fix your problem, just replace this line:
string s1;
with this:
string s1(n, '\0');
Alternatively, you can use std::string::push_back()
:
// ...
string s1;
for(i = n; s[i] != ' '; i--)
s1.push_back(s[i]);
cout << s1;