如何计算字符串中的数字、小写字母、大写字母和特殊字符的数量



我写了一些Python代码来分隔数字、大写字母、小写字母和特殊字符。password_chars是一个列表,其中每个索引都是我输入的字符串中的一个字符,并且此代码处于for循环中,每个索引都为for循环中的单个字符。增加一的数字是小写字母、大写字母和特殊字符的数量:

try:
int(password_input[i])
numbers += 1
except ValueError:
if password_chars[i] != password_chars[i].lower():
capital_letters += 1
elif password_chars[i] != password_chars[i].upper():
lowercase_letters += 1
else:
special_chars += 1

我还写了一些C++代码做同样的事情(character是由字符串组成的数组的索引,这也在for循环中(:

try {
int temp = stoi(character);
numbers_index ++;
}
catch(std::invalid_argument& e) {
if(character >= "A" && character <= "Z") {
capital_letters_index ++;
} else if(character >= "a" && character <= "z") {
lowercase_letters_index ++;
} else {
special_chars_index ++;
}
}

我已经成功地编写了一种简单的Rust方法来将数字与其他数字分离(character是向量的索引,这也是for循环中的索引(:

match character.to_string().parse::<u8>() {
Ok(_) => {
numbers_index += 1;
}
Err(_e) => {
// other sorters go here
}
}

但我一直找不到把它们分开的方法。我一直在研究的主要解决方案是:

match character.to_string().to_uppercase() {
Ok(..) => {
capital_letters_index += 1;
}
Err(..) => {
match character.to_string().to_lowercase() {
Ok(..) => {
lowercase_letters_index += 1;
}
Err(..) => {
special_chars_index += 1;
}
}
}
}

但是我得到了这个编译错误:

error[E0308]: mismatched types
--> srcmain.rs:43:29
|
39 |                         match character.to_string().to_lowercase() {
|                               ------------------------------------ this expression has type `String`
...
43 |                             Err(..) => {
|                             ^^^^^^^ expected struct `String`, found enum `std::result::Result`
|
= note: expected struct `String`
found enum `std::result::Result<_, _>`

经过大量的查找和几天的查看,我不知道如何解决这个问题。我对其他计算方法完全开放,这是我能想到的最简单的一种。

有人指着我https://doc.rust-lang.org/std/primitive.char.html它奏效了。

最新更新