C ++:将字符串的各个元素与其ASCII值进行比较?

时间:2015-01-24 20:59:14

标签: c++ arrays string comparison ascii

我正在尝试编写一个小程序来确定字符串是否是回文。当然,我想忽略任何不是字母的字符。我计划通过将ASCII值与我确定的值进行比较来检查字符串的每个元素来实现这一点:[65,90] U [97,122]

以下代码是来自函数的段,其中传递了字符串string aStrn

while(aStrn[index] != '\0')
{
    if(aStrn[index] > 64 && aStrn[index] < 91 && aStrn[index] > 96 &&
       aStrn[index] < 123)
    {
        ordered.Push(aStrn[index]);
    }
    index++;
}

我通过明确定义if(aStrn[index] != ' ' && aStrn[index] != '\''...等参数来测试此代码,并且它完美地运行。但是,当我尝试上面显示的方法时,ordered仍为空。

我不能为我的生活找出原因,所以所有的帮助都非常感激。我也明白,可能有更好的方法来解决这个问题,但我仍然想知道为什么这不起作用。

3 个答案:

答案 0 :(得分:2)

除非您有其他特定原因,否则您希望将字符串放入std::string个对象中,使用std::isalpha确定某些内容是否为字母,并且可能std::copy_if要复制从源到目的地的合格数据。

std::string source = "This is 1 non-palindromic string!";
std::string dest;

std::copy_if(source.begin(), source.end(),
             std::back_inserter(dest),
             [](unsigned char c) { return std::isalpha(c); });

您可能还希望将字符串完全转换为较低(或较高)的大小写以使比较更容易(假设您希望将大写和小写字母视为相等)。这也非常简单:

std::transform(dest.begin(), dest.end(), 
               dest.begin(),
               [](unsigned char c) { return std::toupper(c); });

答案 1 :(得分:0)

缺少括号和&#39;或者&#39;运营商。简单的错误。

if((aStrn[index] > 64 && aStrn[index] < 91) || (aStrn[index] > 96 && aStrn[index] < 123))修复了它。

答案 2 :(得分:0)

您可以与字符文字进行比较。

if (aStrn[index] >= 'a' && aStrn[index] <= 'z' /* ... */) // for example

但是有standard library个函数可以帮助你。

if (std::isalpha(aStrn[index])) {
    //...
}