2017-11-16 12 views
-1

문자열에서 int 배열을 만들고 싶습니다. 그러나 내 문제는 ASCII 또는 ASCII 값으로 문자열 또는 char 걸립니다.C++ 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++; 
     } 
    } 
} 

는이 arr4 3 1 2을 보유 할 예정. 그러나 (4,3,1,2)와 동일한 40 52 44 51 44 49 44 50 41을 포함합니다. 아스키 번호, 그것은으로 인식하지 않는 것이다 '('. 그래서 내 if 문 제가 제대로 문자를 비교할 수있는 방법. ( ,)이 세 문자를 필터링하지 않는 이유는 무엇입니까?

내가 검색하는 ( (40)로

이 소요 다른 질문을 통해, 그리고 s[i]-=0을 시도했지만 운이 없었다. 사전에 감사!

+0

필요 [I] - = '0'' (인용 부호에주의) 하지만 기본적으로'arr [j] = s [i] - '0'; ' – UnholySheep

+0

[mcve]를 제공하십시오. 제공된 코드는 컴파일 할 수 없습니다. – Kevin

답변

3

먼저 사용할 수 있습니다 s[i]

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

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

당신이 그것을 가지고하는 방법,해야 할 수 '('',' 일 수 있으므로 항상 true로 평가됩니다. 당신은 단지 당신이 아스키 값을 얻을 것이다, int로 캐스팅하는 경우

둘째

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

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

을해야합니다. 실제 숫자로 변환하려면 ascii 값을 0으로 뺍니다. ascii에서 숫자는 모두 순차적이므로 0에 대한 ascii 값을 빼면 해당 목록에서 오프셋을 얻습니다. 테이블 here이 있습니다. 아무것도가`s의인지

+0

'if'조건이 잘못되었다고 생각하지 않았습니다. 고맙습니다! – jaykodeveloper

1
  1. 당신은 사용해야하고 (&&)을 대신 또는 (||)
  2. 당신은 금연실 필요 정수로 RT의 ASCII 값 대신 (int)s[i]의 당신은이 모든의 s[i] - '0'
1

당신은 등이 당신에게 대신 40의 4 줄 것이다

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

을 할

+0

'4'는 ASCII 값이'52'이고,'40'은'''('')입니다. – scohe001

+0

올바른 0의 ascii 값은 48이고 4는 52입니다. 48 = 4. – Katianie