【问题标题】:Check if last character of a string is a letter [duplicate]检查字符串的最后一个字符是否是字母[重复]
【发布时间】:2023-12-30 15:07:01
【问题描述】:

如何在不手动比较每个字母的情况下检查 value 的最后一个字符是否是任何字母?

   if(value.endsWith("A",Qt::CaseInsensitive)==true)
   ...

这是我目前的代码,值必须以 Y/X/Z 开头,并且有 9 个字符

 void Extranjero::setNIE(const QString &value)
{


    if(value.startsWith("Y",Qt::CaseInsensitive)==true && value.length()==9)
    {
    NIE = value;
    }
    else if(value.startsWith("X",Qt::CaseInsensitive)==true && value.length()==9)
    {
    NIE = value;
    }
    else if(value.startsWith("Z",Qt::CaseInsensitive)==true && value.length()==9)
    {
    NIE = value;
    }

    else NIE = "Problemon";
}

【问题讨论】:

  • 为什么不使用std::isalpha
  • 这能回答你的问题吗? *.com/questions/8611815/… 它要求字母和数字,但答案应该很容易调整
  • 谢谢!我不知道 isalpha() 函数
  • 经典是if ((c >= 'A') && (c <= 'Z'))。不过,这仅涵盖大写。
  • @DavidSchwartz - 它可能是“经典”,但它是错误的。例如,字符编码为EBCDIC时不起作用。

标签: c++ qt qt5


【解决方案1】:

如果您希望字符串以任何字母字符结尾,则可以轻松使用isalpha。 但是,在另一种情况下,如果您希望它以“X”、“Y”或“Z”等特定字符开头,则需要手动指定它们。 为了概括后一种情况的代码,我建议将您的特定字符插入一个集合中,然后检查该集合是否包含给定字符串的第一个字符。 我希望这可以帮助您解决问题。

【讨论】:

  • 谢谢!我不知道 isalpha() 函数,现在我只需要将我的字符串拆分成一个 char 数组来检查它。
  • @Yassin 请注意,isalpha 仅适用于常规 ascii chars。 QChar 有一个更适合的isLetter 函数。除非您只需要检查 [a-zA-Z]。
  • @Yassin 如果我的回答对你有帮助,请采纳。
【解决方案2】:

您可以使用back()begin() 成员函数。

if(value.length() == 9){
  QChar tmpChar = value.back();
  if( tmpChar == 'Z' || tmpChar == 'Y' || tmpChar == 'Z'){
   // code..
  }
}

【讨论】:

  • OP:“……不用手动比较每个字母?”
最近更新 更多