在给定字符串上使用 tolower() 和 isalpha() 并将它们的输出设置为另一个字符串

Using tolower() and isalpha() to on a given string and set their output into another string

我想将一个字符串传递给编译器,例如 "Mr. Adam, I am Eve"。我想降低该短语的大小写并通过使用 (isalpha) 删除所有标点符号和空格,即-之后字符串应该是:mradamiameve 它将存储在另一个名为 result 的字符串中例子。 我需要帮助。有什么建议吗?

这是我到目前为止所做的,但不起作用:

#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;
}

在您的代码中,变量 result 从未调整过大小。然后,您试图访问越界的索引,这是未定义的行为。

相反,您应该使用 push_back 方法附加字符的小写字母(如果它是所需字符 - isalpha returns true)。

result.push_back(tolower(str[i]));

如果您使用的是 c++11,则可以使用基于范围的循环:

#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;
}