在 C++ 中将 char 转换为 int
Convert char to int in C++
我正在编写一个 GPA 计算器程序,我想将一个字符的值更改为不同的数字。
例如,如果用户输入字母 a
或 A
,则该值将为 4
。这就是我的程序的样子。如果我使用开关盒,我知道如何让它工作,但我想这样做。
char userInput;
char A, a = 4; // i want to change the value of A, a to 4
char B, b = 3; // i want to change the value of B, b to 3
char C, c = 2; // i want to change the value of C, c to 2
char D, d = 1; // i want to change the value of D, d to 1
char F, f = 0; // i want to change the value of F, f to 0
int count2 = 0;
int count3 = 0;
double gpa;
// the for loop is to make sure program will only run 3 times
for (int i=1; i<4;i++)
{
cout << "Test #" << i << ":" << endl;
cout << endl;
// the do while loop is being used to ensure that the user gets to
// input at least once.
do
{
cout << "Enter a Letter Grade (enter 'X' to exit): ";
cin >> userInput;
// the while loop is only being used for input valiation.
while (userInput!='A' && userInput!='a' && userInput!='B' &&
userInput!='b' && userInput!='C' && userInput!='c' &&
userInput!='D' && userInput!='d' && userInput!='F' &&
userInput!='f' && userInput !='X' && userInput !='x')
{
cout << "\n Invalid letter grade, please try again.\n";
cout << "\n Enter Letter Grade (enter 'X' to exit):";
cin >> userInput;
}
//line number 80 will add the values of the userInput together.
count2+=userInput;
// line 83 is a counter that holds the number of times the loop
// as excuted
count3++;
// line 88 will get a grade point average by dividing count3
// by count2
cout << fixed << showpoint << setprecision(2);
gpa = count2/count3;
} while(userInput !='X' && userInput!='x');
cout << "Total Grade Point: " << count2 << endl;
cout << "GPA: " << gpa << endl;
}
如果我的问题太模糊,请告诉我,以便我澄清。
如果您查看 ASCII table,您会发现字母只是数字。
您可以使用简单的减法计算偏移量:
'a' - 'a' == 0
'b' - 'a' == 1
'c' - 'a' == 2
等等。要将其转换为 GPA 成绩,您可以进行简单的转换:
int deltaA = (int)('a' - 'a'); // explicit cast to int is not really needed
int max = 4;
int grade = max - deltaA;
替代解决方案是使用地图:
std::map<char, int> grades;
grades['a'] = 4;
grades['b'] = 3;
grades['c'] = 2;
...
int score = grades['a']; // score == 4
最好坚持使用大写或小写字母。您可以使用 int std::tolower(int ch)
和 int std::toupper(int ch)
函数转换它们。将 char
放入 int
是可以的 - 两者都是整数并且 int
具有更宽的范围并且 char
将适合。
反过来 - 没那么容易。 int
的范围比 char
更宽,您应该在转换回之前检查 int
值是否在 char
范围内。
几件事...
char A, a = 4;
创建字符 VARIABLES(存储位置)并为变量分配值 4。变量代表一个内存位置,一个存储信息的地方。它是此存储位置的人类可读表示。它不是翻译机制。 CHARACTER'a'是一个可以存储在变量中的ascii码表示的值,十六进制值为61或十进制为97。变量a与字符值'a'不是一回事。并将十进制 4 存储到字符变量中是将其设置为 EOT 字符。
最好的办法是使用开关。效果很好。
最好在使用变量之前对其进行初始化。您的计数器可能从零开始,但根据编译器的不同,它们可能包含随机值。在进入循环之前将它们设置为零。
感谢大家的帮助。这就是我解决问题的方法。我本来想 post 不久前就忘记了。
char userInput;
// the for loop is to make sure program will only run 3 times
for (int i=1; i<4;i++)
{
int count2 = 0;
double count3 = 0.0;
double gpa;
cout << "Test #" << i << ":" << endl;
cout << endl;
// the do while loop is being used to ensure that the user gets to
// input at least once.
do
{
cout << "Enter a Letter Grade (enter 'X' to exit): ";
cin >> userInput;
// the while loop is only being used for input validation.
while (userInput!='A' && userInput!='a' && userInput!='B' &&
userInput!='b' && userInput!='C' && userInput!='c' &&
userInput!='D' && userInput!='d' && userInput!='F' &&
userInput!='f' && userInput !='X' && userInput !='x')
{
cout << "\n Invalid letter grade, please try again.\n";
cout << "\n Enter Letter Grade (enter 'X' to exit):";
cin >> userInput;
}
if(userInput !='X' && userInput !='x')
{
int grade=func(userInput);
// count2 will add the values of the userInput together
count2+=grade;
// count3 is a counter that holds the number of times the loop
// as execute.
count3++;
}
cout << fixed << showpoint << setprecision(2);
// to get the grade point avarage you need to divide count3 by count2
gpa = count3/count2;
} while(userInput !='X' && userInput!='x');
// the next few lines will display the information gathered
cout << endl;
cout << "Total Grade Points: " << count2 << endl;
cout << "GPA: " << gpa << endl;
cout << endl;
cout << endl;
}
return 0;
}
int func(char userInput)
{
// grade is being set to zero so there is a less chance of getting wrong
// data
int grade=0;
// this will make the userInput into a capital letter
userInput=toupper(userInput);
// we are setting value to equal the ascii number of the chosen
// letter
int value=userInput; // if input='A' then value = 65
// by subtracting 69 by the value it will help get us the point value
// we need.
grade=69-value; // gpa=4
// if the number value of grade becomes negative it will assign grade
// to store the number 0
if(grade<0)grade=0;
return grade;
}
我正在编写一个 GPA 计算器程序,我想将一个字符的值更改为不同的数字。
例如,如果用户输入字母 a
或 A
,则该值将为 4
。这就是我的程序的样子。如果我使用开关盒,我知道如何让它工作,但我想这样做。
char userInput;
char A, a = 4; // i want to change the value of A, a to 4
char B, b = 3; // i want to change the value of B, b to 3
char C, c = 2; // i want to change the value of C, c to 2
char D, d = 1; // i want to change the value of D, d to 1
char F, f = 0; // i want to change the value of F, f to 0
int count2 = 0;
int count3 = 0;
double gpa;
// the for loop is to make sure program will only run 3 times
for (int i=1; i<4;i++)
{
cout << "Test #" << i << ":" << endl;
cout << endl;
// the do while loop is being used to ensure that the user gets to
// input at least once.
do
{
cout << "Enter a Letter Grade (enter 'X' to exit): ";
cin >> userInput;
// the while loop is only being used for input valiation.
while (userInput!='A' && userInput!='a' && userInput!='B' &&
userInput!='b' && userInput!='C' && userInput!='c' &&
userInput!='D' && userInput!='d' && userInput!='F' &&
userInput!='f' && userInput !='X' && userInput !='x')
{
cout << "\n Invalid letter grade, please try again.\n";
cout << "\n Enter Letter Grade (enter 'X' to exit):";
cin >> userInput;
}
//line number 80 will add the values of the userInput together.
count2+=userInput;
// line 83 is a counter that holds the number of times the loop
// as excuted
count3++;
// line 88 will get a grade point average by dividing count3
// by count2
cout << fixed << showpoint << setprecision(2);
gpa = count2/count3;
} while(userInput !='X' && userInput!='x');
cout << "Total Grade Point: " << count2 << endl;
cout << "GPA: " << gpa << endl;
}
如果我的问题太模糊,请告诉我,以便我澄清。
如果您查看 ASCII table,您会发现字母只是数字。
您可以使用简单的减法计算偏移量:
'a' - 'a' == 0
'b' - 'a' == 1
'c' - 'a' == 2
等等。要将其转换为 GPA 成绩,您可以进行简单的转换:
int deltaA = (int)('a' - 'a'); // explicit cast to int is not really needed
int max = 4;
int grade = max - deltaA;
替代解决方案是使用地图:
std::map<char, int> grades;
grades['a'] = 4;
grades['b'] = 3;
grades['c'] = 2;
...
int score = grades['a']; // score == 4
最好坚持使用大写或小写字母。您可以使用 int std::tolower(int ch)
和 int std::toupper(int ch)
函数转换它们。将 char
放入 int
是可以的 - 两者都是整数并且 int
具有更宽的范围并且 char
将适合。
反过来 - 没那么容易。 int
的范围比 char
更宽,您应该在转换回之前检查 int
值是否在 char
范围内。
几件事...
char A, a = 4; 创建字符 VARIABLES(存储位置)并为变量分配值 4。变量代表一个内存位置,一个存储信息的地方。它是此存储位置的人类可读表示。它不是翻译机制。 CHARACTER'a'是一个可以存储在变量中的ascii码表示的值,十六进制值为61或十进制为97。变量a与字符值'a'不是一回事。并将十进制 4 存储到字符变量中是将其设置为 EOT 字符。
最好的办法是使用开关。效果很好。
最好在使用变量之前对其进行初始化。您的计数器可能从零开始,但根据编译器的不同,它们可能包含随机值。在进入循环之前将它们设置为零。
感谢大家的帮助。这就是我解决问题的方法。我本来想 post 不久前就忘记了。
char userInput;
// the for loop is to make sure program will only run 3 times
for (int i=1; i<4;i++)
{
int count2 = 0;
double count3 = 0.0;
double gpa;
cout << "Test #" << i << ":" << endl;
cout << endl;
// the do while loop is being used to ensure that the user gets to
// input at least once.
do
{
cout << "Enter a Letter Grade (enter 'X' to exit): ";
cin >> userInput;
// the while loop is only being used for input validation.
while (userInput!='A' && userInput!='a' && userInput!='B' &&
userInput!='b' && userInput!='C' && userInput!='c' &&
userInput!='D' && userInput!='d' && userInput!='F' &&
userInput!='f' && userInput !='X' && userInput !='x')
{
cout << "\n Invalid letter grade, please try again.\n";
cout << "\n Enter Letter Grade (enter 'X' to exit):";
cin >> userInput;
}
if(userInput !='X' && userInput !='x')
{
int grade=func(userInput);
// count2 will add the values of the userInput together
count2+=grade;
// count3 is a counter that holds the number of times the loop
// as execute.
count3++;
}
cout << fixed << showpoint << setprecision(2);
// to get the grade point avarage you need to divide count3 by count2
gpa = count3/count2;
} while(userInput !='X' && userInput!='x');
// the next few lines will display the information gathered
cout << endl;
cout << "Total Grade Points: " << count2 << endl;
cout << "GPA: " << gpa << endl;
cout << endl;
cout << endl;
}
return 0;
}
int func(char userInput)
{
// grade is being set to zero so there is a less chance of getting wrong
// data
int grade=0;
// this will make the userInput into a capital letter
userInput=toupper(userInput);
// we are setting value to equal the ascii number of the chosen
// letter
int value=userInput; // if input='A' then value = 65
// by subtracting 69 by the value it will help get us the point value
// we need.
grade=69-value; // gpa=4
// if the number value of grade becomes negative it will assign grade
// to store the number 0
if(grade<0)grade=0;
return grade;
}