C++:将字符串的各个元素与其 ASCII 值进行比较?
C++: Comparing individual elements of a string to their ASCII values?
我正在尝试编写一个小程序来确定字符串是否为回文。当然,我想忽略任何不是字母的字符。我计划通过将 ASCII 值与我确定的值进行比较来检查字符串的每个元素来实现此目的:[65,90] U [97,122]
以下代码是函数的一个片段,其中传入了一个字符串 string aStrn
。
while(aStrn[index] != '[=10=]')
{
if(aStrn[index] > 64 && aStrn[index] < 91 && aStrn[index] > 96 &&
aStrn[index] < 123)
{
ordered.Push(aStrn[index]);
}
index++;
}
我通过显式定义 if(aStrn[index] != ' ' && aStrn[index] != '\''...
等参数来测试此代码,它运行良好。但是,当我尝试上面显示的方法时,ordered
仍然是空的。
我一辈子都弄不明白为什么,所以非常感谢大家的帮助。我也知道可能有更好的方法来解决这个问题,但我仍然想了解为什么这不起作用。
缺少括号和 'OR' 运算符。简单的错误。
if((aStrn[index] > 64 && aStrn[index] < 91) || (aStrn[index] > 96 && aStrn[index] < 123))
已修复。
除非您有特殊原因,否则您希望将字符串放入 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); });
您可以与字符文字进行比较。
if (aStrn[index] >= 'a' && aStrn[index] <= 'z' /* ... */) // for example
但是 standard library 函数可以为您完成这项工作。
if (std::isalpha(aStrn[index])) {
//...
}
我正在尝试编写一个小程序来确定字符串是否为回文。当然,我想忽略任何不是字母的字符。我计划通过将 ASCII 值与我确定的值进行比较来检查字符串的每个元素来实现此目的:[65,90] U [97,122]
以下代码是函数的一个片段,其中传入了一个字符串 string aStrn
。
while(aStrn[index] != '[=10=]')
{
if(aStrn[index] > 64 && aStrn[index] < 91 && aStrn[index] > 96 &&
aStrn[index] < 123)
{
ordered.Push(aStrn[index]);
}
index++;
}
我通过显式定义 if(aStrn[index] != ' ' && aStrn[index] != '\''...
等参数来测试此代码,它运行良好。但是,当我尝试上面显示的方法时,ordered
仍然是空的。
我一辈子都弄不明白为什么,所以非常感谢大家的帮助。我也知道可能有更好的方法来解决这个问题,但我仍然想了解为什么这不起作用。
缺少括号和 'OR' 运算符。简单的错误。
if((aStrn[index] > 64 && aStrn[index] < 91) || (aStrn[index] > 96 && aStrn[index] < 123))
已修复。
除非您有特殊原因,否则您希望将字符串放入 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); });
您可以与字符文字进行比较。
if (aStrn[index] >= 'a' && aStrn[index] <= 'z' /* ... */) // for example
但是 standard library 函数可以为您完成这项工作。
if (std::isalpha(aStrn[index])) {
//...
}