Im having problems with a function of mine. I was just practicing playing with c++ strings, and most of the program works just fine, but after i tried to add a function to calculate the Digit Sum of the numbers in the string, i encountered some weird behaviour.

If i just input the string to be 1, the digit sum is 49, 2 is 50, 3 is 51, and so on. It doesn't really make sense, and the code looks fine to me.

Code:
#include <iostream>
#include <string>

int ZeroTest(std::string str);
int EvenTest(std::string str);
int OddTest(std::string str);
int StrTotal(std::string str);

int main()
{
    int ZeroCount = 0, EvenCount = 0, OddCount = 0, Total = 0;
    std::string str;
    
    std::cout << "Enter string to test: ";
    std::cin >> str;
    std::cout << std::endl;
    
    ZeroCount = ZeroTest(str);
    EvenCount = EvenTest(str);
    OddCount = OddTest(str);
    Total = StrTotal(str);
    
    if((ZeroCount + EvenCount + OddCount) == str.size())
    {
                  std::cout << "Number of zeroes : " << ZeroCount << std::endl;
                  std::cout << "Number of evens : " << EvenCount << std::endl;
                  std::cout << "Number of odds : " << OddCount << std::endl << std::endl;
                  std::cout << "String total is : " << Total << std::endl;
                  std::cout << "String size is : " << str.size() << std::endl;
    }
    else
    {
                  std::cerr << "String size error" << std::endl;
    }
    std::cin.ignore(2);
    return 0;
}

int ZeroTest(std::string str)
{
    int i = 0, ZeroCount = 0;
    
    for(i; i < str.size(); i++)
    {
           if(str[i] == '0')
           {
                     ZeroCount++;
           }
    }
    return(ZeroCount);
}

int EvenTest(std::string str)
{
    int i = 0, EvenCount = 0;
    
    for(i; i < str.size(); i++)
    {
           if(str[i] % 2 == false && str[i] != '0')
           {
                     EvenCount++;
           }
    }
    return(EvenCount);
}

int OddTest(std::string str)
{
    int i = 0, OddCount = 0;
    
    for(i; i < str.size(); i++)
    {
           if(str[i] % 2 == true)
           {
                      OddCount++;
           }
    }
    return(OddCount);
}

int StrTotal(std::string str)
{
    int i = 0, Total = 0;
    
    while(i < str.size())
    {
           Total = Total + str[i];
           i++;
    }
    return(Total);
}