21xrx.com
2025-04-28 08:07:52 Monday
文章检索 我的文章 写文章
C++如何判断字符串是否合法
2023-07-12 04:39:26 深夜i     274     0
C++ 字符串 判断 合法

    return isalpha(c) || isdigit(c) || c == '_' || c == '-';

在C++中,判断字符串是否合法是一个非常常见的操作。一个字符串被认为是合法的,当且仅当它只包含字母、数字和某些特定的字符。那么,如何在C++中判断一个字符串是否合法呢?下面我们将介绍几种实用的方法。

第一种方法是使用正则表达式。C++中的regex库提供了支持正则表达式的功能。我们可以使用regex_match函数来判断一个字符串是否符合某个正则表达式的规则。例如,以下代码片段判断一个字符串是否只包含字母和数字:

#include <regex>
#include <iostream>
bool is_valid(std::string str) {
  std::regex pattern("^[a-zA-Z0-9]+$");
  return std::regex_match(str, pattern);
}
int main() {
  std::string str1 = "abc123";
  std::string str2 = "abc123<>?";
  
  std::cout << is_valid(str1) << std::endl; // 输出:1
  std::cout << is_valid(str2) << std::endl; // 输出:0
  
  return 0;
}

代码中的"^"和"$"表示一个字符串的开头和结尾,"[a-zA-Z0-9]"表示所有字母和数字的集合,"+"表示出现一次或多次。

第二种方法是遍历每个字符,并判断它是否属于某个合法字符集。代码如下:

#include <iostream>
bool is_valid(std::string str) {
  for (char c : str) {
    if (!(isalpha(c) || isdigit(c) || c == '_' || c == '-'))
      return false;
    
  }
  return true;
}
int main() {
  std::string str1 = "abc123";
  std::string str2 = "abc123<>?";
  
  std::cout << is_valid(str1) << std::endl; // 输出:1
  std::cout << is_valid(str2) << std::endl; // 输出:0
  
  return 0;
}

其中,isalpha和isdigit是C++自带的函数,用于判断一个字符是否是字母或数字。而"_"和"-"是特定的合法字符。

第三种方法是使用STL提供的算法函数。这种方法的好处是代码简洁,但运行效率可能不如前两种方法。代码如下:

#include <iostream>
#include <algorithm>
bool is_valid(std::string str) {
  return std::all_of(str.begin(), str.end(), [](char c) {
    return isalpha(c) || isdigit(c) || c == '_' || c == '-';
  });
}
int main() {
  std::string str1 = "abc123";
  std::string str2 = "abc123<>?";
  
  std::cout << is_valid(str1) << std::endl; // 输出:1
  std::cout << is_valid(str2) << std::endl; // 输出:0
  
  return 0;
}

以上三种方法,可以根据自己的需要和喜好选择其一。但需要注意的是,在使用正则表达式时,需要特别注意表达式的准确性和效率,以免出现意外的结果或降低程序运行效率。

  
  

评论区