首页 > 解决方案 > C ++计算字符串中的偶数

问题描述

我在这里有一个脚本,它计算 int 类型 var 中的偶数。

#include <iostream>
#include <string>

int main()
{
    std::cout << "Type a string: " << std::endl;

    std::string s;
    std::cin >> s; 

    unsigned int digits = 0, evens = 0;

    for ( std::string::size_type i = 0; i < s.size() && s[i] >= '0' && s[i] <= '9'; i++ )
    {
        ++digits;
        evens += ( s[i] - '0' ) % 2 == 0;
    }        

    std::cout << "The number has " << digits << " digit(s)." << std::endl;
    std::cout << "The number has " << evens << " even digit(s)." << std::endl;

    return 0;
}

我试图找到一种方法将其转换为字符串,以便我可以计算该字符串中有多少偶数或数字?

Type a string:
29 coaches 28

Even: 1
Found Numbers: 1

在python中它应该是这样的:

s = "75,41,14,8,73,45,-16"
evenNumbers = []

for number in s.split(","):
    int_num = int(number)
    if int_num % 2 == 0 and int_num > 0:
        evenNumbers.append(int_num)

print("Even Numbers : \"{}\"".format(evenNumbers))

但我不知道如何在 C++ 中做到这一点

标签: c++

解决方案


您的循环将在第一个非数字字符处停止:i < s.size() && s[i] >= '0' && s[i] <= '9'

此外,您也在计算字母数字。所以你的循环需要先修复。我建议对此类问题使用正则表达式,它将非常通用:

const std::regex numbers("\\-?\\d+");

for (auto it = std::sregex_iterator(s.begin(), s.end(), numbers); it != std::sregex_iterator(); it++) { 
    ++digits;
    char lastCharacterOfMatchingString = *it->str(0).rbegin();
    evens += (lastCharacterOfMatchingString - '0') % 2 == 0;
}

推荐阅读