How to access c++ string by index for a integer number?
How do i edit this program for j to contain "1"?
Currently it shows 49 which is the ascii value i think.
#include <iostream>
using namespace std;
main()
{
string i = "123";
int j = i[0];
cout << j;
}
You can do this as shown below:
int main()
{
std::string i = "123";
int j = i[0] - '0'; //this is the important statement
std::cout << j;
}
Explanation
'0'
is a character literal.
So when i wrote:
int j = i[0] - '0';
The fundamental reason why/how i[0] - '0'
works is through promotion.
In particular,
both
i[0]
and'0'
will be promoted toint
. And the final result that is used to initialize variablej
on the left hand side will be the resultant of subtraction of those two promotedint
values on the right hand side.
And the result is guaranteed by the Standard C++ to be the integer 1
since from C++ Standard (2.3 Character sets)
- ...In both the source and execution basic character sets, the value of each character after 0 in the above list of decimal digits shall be one greater than the value of the previous.
So there is no need to use magic number like 48
etc.
- Construct a new string from character.
- Convert the substring to integer. Example:
#include <iostream>
using namespace std;
main() {
string i = "123";
// Method 1, use constructor
string s1(1, i[0]);
cout << s1 << endl;
// Method 2, use convertor
int j = atoi(s1.c_str());
cout << j << endl;
}
The solution is simple , just cast j to char . Example:
#include <iostream>
using namespace std;
main()
{
string i = "123";
int j = i[0];
cout << char(j);
}
You have to subtract ASCII '0' (48) from the character digit:
#include <iostream>
using namespace std;
int main()
{
string i = "123";
int j = i[0] - 48; // ASCII for '0' is 48
// or
// int j = i[0] - '0';
cout << j;
}