Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Slicing string character correctly in C++

I’d like to count number 1 in my input, for example,111 (1+1+1) must return 3and
101must return 2 (1+1)
To achieve this,I developed sample code as follows.

#include <iostream>
using namespace std;

int main(){
    string S;
    cout<<"input number";
    cin>>S;
    cout<<"S[0]:"<<S[0]<<endl;
    cout<<"S[1]:"<<S[1]<<endl;
    cout<<"S[2]:"<<S[2]<<endl;
    int T = (int) (S[0]+S[1]+S[2]);
    cout<<"T:"<<T<<endl;
    return 0;
}

But when I execute this code I input 111 for example and my expected return is 3 but it returned 147.

[ec2-user@ip-10-0-1-187 atcoder]$ ./a.out
input number
111
S[0]:1
S[1]:1
S[2]:1
T:147

What is the wrong point of that ? I am totally novice, so that if someone has opinion,please let me know. Thanks

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

It’s because S[0] is a char. You are adding the character values of these digits, rather than the numerical value. In ASCII, numerical digits start at value 48. In other words, each of your 3 values are exactly 48 too big.

So instead of doing 1+1+1, you’re doing 49+49+49.

The simplest way to convert from character value to digit is to subtract 48, which is the value of 0.

e.g, S[0] - '0'.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading