我正在尝试编写一个小程序来确定字符串是否是回文。当然,我想忽略任何不是字母的字符。我计划通过将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
仍为空。
我不能为我的生活找出原因,所以所有的帮助都非常感激。我也明白,可能有更好的方法来解决这个问题,但我仍然想知道为什么这不起作用。
答案 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])) {
//...
}