C++ 将字符串的一部分转换为int并返回将创建随机字符
我在尝试将时间从12小时格式转换为24小时格式时遇到问题 注意:-这是从一个在线测试网站,并与该网站工作的样板代码填写,所以我只打算张贴我被允许键入程序的一部分C++ 将字符串的一部分转换为int并返回将创建随机字符,c++,C++,我在尝试将时间从12小时格式转换为24小时格式时遇到问题 注意:-这是从一个在线测试网站,并与该网站工作的样板代码填写,所以我只打算张贴我被允许键入程序的一部分 string timeConversion(string s) { /* * Write your code here. */ int hours = ((int) s[0])*10+((int) s[1]); char r[7]; //cout<< sizeof(s
string timeConversion(string s) {
/*
* Write your code here.
*/
int hours = ((int) s[0])*10+((int) s[1]);
char r[7];
//cout<< sizeof(s)<<"\n";
if(s[8]=='P')
{
hours=hours+12;
r[0]=(char) (hours/10);
r[1]=(char) (hours%10);
for (int i=2;i<8;i++)
{
r[i]=s[i];
}
}else
{
for(int i=0;i<8;i++)
{
r[i]=s[i];
}
}
return r;
}
现在我自己在另一个编译器中测试第5行(即我将小时部分转换为整数的那一行),出于某种原因,而不是正确地转换其显示的小时数=534
你们能告诉我哪里出了问题以及如何修复吗?我早些时候发现我的代码出了什么问题。它之所以不工作是因为C++没有将数值字符转换成实际的数值,而是将它转换成对应的ASCII值,它开始于48为“0”,在“9”结束时为57。 语句用于转换字符串中的小时数,反之亦然 字符串->整数
int hours = (((int) s[0])%48)*10+(((int) s[1])%48);
或
int->string
r[0]=(char) ((hours/10)+48);
r[1]=(char) ((hours%10)+48);
不要越过这道栅栏,你将离开规定的行为区域!(B.Stroustrup)
s[0]
包含字符串中第0个元素的代码点,作为字符
;虽然char
s可以被视为数字(代码点毕竟只是数字),但代码点的数字并不等于其对应标志符号表示的数字:'0'!=0
,“1”!=1等。ch-'0'
将为您提供由数字字符表示的数值('0'..'9'
)。
int hours = (((int) s[0])-48)*10+(((int) s[1])-48);
r[0]=(char) ((hours/10)+48);
r[1]=(char) ((hours%10)+48);