c ++ char只显示ascii值?

时间:2017-11-16 21:29:34

标签: c++ string char ascii

我想从string构建int数组。但是我的问题是它将字符串或char作为ascii,而不是它的值。

#include <cstdio>
#include <string>

using namespace std;

int *arr = new int[10];
int j = 0;
string answer;
cout << "Enter the value: ";
// (4,3,1,2) is typed
cin >> answer;

void buildArr(string s){
    for(int i = 0; i<10; i++){
        if(s[i] != '(' || s[i] != ',' || s[i] != ')'){
            arr[j] = (int)s[i];
            j++;
        }
   }
}

它应该让arr成立4 3 1 2。但它包含40 52 44 51 44 49 44 50 41,与(4,3,1,2)相同。

它需要(为40,这是ascii数字,它不会将其识别为'('。所以我的if语句不会过滤掉( , )这三个字符。怎么能我正确地比较了char?

我搜索了其他问题,并尝试s[i]-=0但没有运气。提前谢谢!

3 个答案:

答案 0 :(得分:3)

首先,这个:

if(s[i] != '(' || s[i] != ',' || s[i] != ')')

应该是

if(s[i] != '(' && s[i] != ',' && s[i] != ')')

您拥有它的方式,s[i]无法同时为'('',',它始终会评估为真。

其次,

arr[j] = (int)s[i];

应该是

 arr[j] = s[i] - '0'

如果你只是将它转换为int,那么你将得到ascii值。要将其转换为实际数字,请将ascii值减去零。在ascii中,数字都是连续的,因此如果将ascii值减去零,则会得到该列表中的偏移量。有一张表here

答案 1 :(得分:1)

  1. 您应该使用和(&&)代替或(||
  2. 您需要将ASCII值转换为整数,而不是(int)s[i]您可以使用s[i] - '0'

答案 2 :(得分:1)

你需要做

(int)str[i] - '0';

这将给你4而不是40,等等。