繁体   English   中英

在C ++中将char转换为int

[英]Convert char to int in C++

我正在编写一个GPA计算器程序,并且想将一个char的值更改为另一个数字。

例如,如果用户输入字母aA该值为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表,您会发现字母只是数字。

http://www.asciitable.com/

您可以使用简单的减法来计算偏移量:

'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范围内。

几件事...

字符A,a = 4; 创建字符VARIABLES(存储位置)并将变量的值分配为4。变量表示存储位置,即存储信息的位置。 它是此存储位置的可读格式。 这不是翻译机制。 CHARACTER'a'是可以存储在变量中的ascii码表示的值,十六进制值为61或十进制97。变量a与字符值'a'不同。 并将十进制4存储到字符变量中会将其设置为EOT字符。

最好的选择是使用开关。 工作正常。

最佳实践是在使用变量之前对其进行初始化。 您的计数器可能从零开始,但是根据编译器的不同,它们可能包含随机值。 在进入循环之前将它们设置为零。

谢谢大家的帮助。 这就是我解决问题的方式。 我原本打算将其发布,但是忘记了。

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM