I want to pass a string to the compiler for example "Mr. Adam, I am Eve" . I want to lower the case of that phrase and remove all the punctuation marks and spaces by using (isalpha), i.e.- afterwards the string should be: mradamiameve
which will be stored in another string called result
for example.
I need help with this. Any suggestions?
This is what I have done so far, which does not work:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
string str = "Mr. Adam, I am Eve";
string result;
for (size_t i = 0; i < str.length(); i)
{
if (isalpha(str[i]))
{
result[i] = str[i];
}
}
// here str should be = "mradamiameve" YET it is still "Mr. Adam, I am Eve"
cout << "after using to tolower() and isalpha() str is:" << str << endl;
return 0;
}
CodePudding user response:
If you are on c 11 you could use range based loop:
#include <iostream>
#include <cctype>
#include <string>
int main()
{
std::string result, str = "Mr. Adam, I am Eve";
for (unsigned char c : str)
if (std::isalpha(c))
result = std::tolower(c);
std::cout << result << std::endl;
}
CodePudding user response:
In your code, the variable result
was never resized. Then, you are trying to access indexes that are out of bounds, which is undefined behavior.
Instead, you should append the lowercase of the character (in case it is a desired one - isalpha
returns true), using the push_back
method.
result.push_back(tolower(str[i]));