将ascii substr转换为int

时间:2012-04-04 09:31:29

标签: c++

第一年大学有问题将ascii转换为int。

问题在于这段代码

unsigned short iminutes =((分钟[3] -48)* 10)+(分钟[4] -48);

当我在家里的代码块上运行它时会返回一个不正确的值,当我再次运行它时,我得到一个不同的错误值。

当我在大学期间在Borlands上运行时,屏幕刚刚启动并消失,然后才能读取它,所以我也不能在这里使用系统时钟。

现在是复活节,所以即使我在大学,我也不能惹恼我的导师,因为他们不是。

#include <iostream.h>
#include <conio.h>
#include <string>
//#include <time.h>
//#include <ctype.h>


using namespace std;

int main() {

bool q = false;


do {

// convert hours to minutes ... then total all the minutes
// multiply total minutes by $25.00/hr
// format (hh:mm:ss)


string theTime;

cout << "\t\tPlease enter time  " << endl;
cout <<"\t\t";
cin >> theTime;
cout << "\t\t"<< theTime << "\n\n";

string hours = theTime.substr (0, 2);
cout <<"\t\t"<< hours << endl;
unsigned short ihours = (((hours[0]-48)*10 + (hours[1] -48))*60);
cout << "\t\t"<< ihours << endl;

string minutes = theTime.substr (3, 2);
cout <<"\t\t"<< minutes << endl;
unsigned short iminutes = ((minutes[3]-48)*10) + (minutes[4]-48);
cout << "\t\t" << iminutes << endl;

cout << "\n\n\t\tTotal Minutes  " <<(ihours + iminutes);
cout << "\n\n\t\tTotal Value  " <<(ihours + iminutes)*(25.00/60) << "\n\n";

}

while (!q);

cout << "\t\tPress any key to continue ...";
getch();
return 0;
}

3 个答案:

答案 0 :(得分:1)

您将分钟设置为TheTime的子字符串。分钟有2个字符。第一个在几分钟内从0位开始。

所以这个

unsigned short iminutes = ((minutes[3]-48)*10) + (minutes[4]-48);

是错误的,因为它在几分钟内访问不存在的字符3和4,因为分钟只有两个字符长。它只有字符作为位置0和1。

应该是这个

unsigned short iminutes = ((minutes[0]-48)*10) + (minutes[1]-48);

或者您可以使用它:

unsigned short iminutes = ((theTime[3]-48)*10) + (theTime[4]-48);

答案 1 :(得分:0)

问题在于,即使你从原始字符串获得位置3和4的字符,新字符串也只有两个字符(即只有索引0和1)。

答案 2 :(得分:0)

istringstream iss(theTime.substr(0, 2));
iss >> ihour;