21xrx.com
2024-12-22 19:59:34 Sunday
登录
文章检索 我的文章 写文章
C++如何判断字符串是否合法
2023-07-12 04:39:26 深夜i     --     --
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;

}

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

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复