请大神帮忙解释以次两句代码的原理
请大神帮忙解释以下两句代码的原理
#include <iostream>
using namespace std;
void converlong(string n, long&);
int main(void){
string a="abcdef85"; //待转换的字符串
long lvalue=0; //保存转换后的值
converlong(a, lvalue); //执行转换
cout<<lvalue<<":"<<lvalue+1<<endl; //输出转换结果
}
// n为待转换的字符串,lvalue 为转换结果
void converlong(string n, long& lvalue){
string::size_type index=0;
for (; index<n.size(); index++){
char m='0';
char p='9';
//过滤所有小于字符 ‘0’ 和大于字符‘9’的字符
if (n[index]>m && n[index]<p){
//将字符转换为整数
long temp=n[index]-48; | 请大神帮忙解释以下两句代码的原理,本人不知道这两句代码是如何实现的。
lvalue=lvalue * 10 + temp; |
}
}
}
------解决思路----------------------
long temp = n[index] - 48;
实际上就是
long temp = n[index] - '0';
相当于把字符转换为数字
lvalue = lvalue * 10 + temp;
就是把数字加上自己的权位(比如个十百千位),最终把字符串转换为整数了。
------解决思路----------------------
修改如下:
------解决思路----------------------
char字符实际上存储的是整数,
char c1 = 'A'; 相当于char c2 = 65;
因此int i = c1 - c2;的结果是
i = 65-65 = 0;
同样的,long lvalue = ‘8’ - ‘0’ = 8;
这里’0‘ 对应的是整数48;
#include <iostream>
using namespace std;
void converlong(string n, long&);
int main(void){
string a="abcdef85"; //待转换的字符串
long lvalue=0; //保存转换后的值
converlong(a, lvalue); //执行转换
cout<<lvalue<<":"<<lvalue+1<<endl; //输出转换结果
}
// n为待转换的字符串,lvalue 为转换结果
void converlong(string n, long& lvalue){
string::size_type index=0;
for (; index<n.size(); index++){
char m='0';
char p='9';
//过滤所有小于字符 ‘0’ 和大于字符‘9’的字符
if (n[index]>m && n[index]<p){
//将字符转换为整数
long temp=n[index]-48; | 请大神帮忙解释以下两句代码的原理,本人不知道这两句代码是如何实现的。
lvalue=lvalue * 10 + temp; |
}
}
}
------解决思路----------------------
long temp = n[index] - 48;
实际上就是
long temp = n[index] - '0';
相当于把字符转换为数字
lvalue = lvalue * 10 + temp;
就是把数字加上自己的权位(比如个十百千位),最终把字符串转换为整数了。
------解决思路----------------------
修改如下:
#include <iostream>
#include <string>
using namespace std;
void converlong(string n, long&);
int main(void){
string a = "abcdef85"; //待转换的字符串
long lvalue = 0; //保存转换后的值
converlong(a, lvalue); //执行转换
//为啥加一?
//cout << lvalue << ":" << lvalue + 1 << endl; //输出转换结果
cout << "lvalue" << ":" << lvalue << endl; //输出转换结果
return 0;
}
//n为待转换的字符串,lvalue为转换结果
void converlong(string n, long& lvalue){
string::size_type index=0;
for (; index < n.size(); index++){
char m = '0';
char p = '9';
//过滤所有小于字符 ‘0’ 和大于字符‘9’的字符
//if (n[index]>m && n[index]<p){
if (n[index] >= m && n[index] <= p){
//将字符转换为整数
long temp = n[index] - 48;
lvalue = lvalue * 10 + temp;
}
}
}
------解决思路----------------------
char字符实际上存储的是整数,
char c1 = 'A'; 相当于char c2 = 65;
因此int i = c1 - c2;的结果是
i = 65-65 = 0;
同样的,long lvalue = ‘8’ - ‘0’ = 8;
这里’0‘ 对应的是整数48;