c++ - 如何使用 C++ 字符串将大写辅音替换为相应的小写辅音?

标签 c++ string char tolower

我正在解决一个小问题,但遇到了运行时错误,我不知道该错误的根源在哪里。我正在接受一个字符串 word并通过构建另一个字符串 new_word 将其大写辅音转换为相应的小写辅音.错误出现在 else if陈述。

错误:C++ 异常:内存位置 0x006FF330 处的 std::out_of_range。

请帮忙!

int main()
{
    string word, new_word; 
    string::iterator i;
    cin >> word;
    for (i = word.begin(); i < word.end(); i++)
    {
        if (*i != 'A' && *i != 'a' && *i != 'O' && *i != 'o' && *i != 'Y' && *i != 'y' && *i != 'E' && *i != 'e' && *i != 'U' && *i != 'u' && *i != 'I' && *i != 'i')
        {

            if (*i > 'a' && *i <= 'z') 
            {
                new_word.push_back('.');
                new_word.push_back(*i);
            }
            else if (*i > 'A' && *i <= 'Z')
            {
                new_word.push_back(word.at(*i)+32);
            }

        }
    }
    cout << new_word;

    return 0;
}

最佳答案

看来你的意思

new_word.push_back( *i +32);

代替
new_word.push_back(word.at(*i)+32);

请注意,您可以使用标准 C 函数 tolower,而不是使用像 32 这样的魔数(Magic Number)。在标题中声明 <cctype> .例如
#include <cctype>
//...
new_word.push_back( std::tolower( ( unsigned char )*i ) );

关于c++ - 如何使用 C++ 字符串将大写辅音替换为相应的小写辅音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59235033/

相关文章:

c++ - 获取用户名的便携方式

python - 查找列表中的单词,然后删除该单词以及列中的任何其他尾随单词

c++ - 为什么 & 对字符串的行为不同?

ruby - 如何检测另一个字符串中 1 个字符串中是否存在子字符串?

java - 为什么 int 参数允许传递 char 值,但 char 参数不接受传递 int 值?

c++ - 从初始化列表填充 boost::multi_array 的最佳方法是什么?

c++ - 将不相关类型的对象重新解释为空类是否是未定义行为

c++ - 如何区分 char 文字和 unsigned int 作为构造函数的参数

c++ - 了解 C++ - "character literal"与 "string literal"

c++ - 如何将文件存储在 char* 中