我想从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
但没有运气。提前谢谢!
答案 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)
&&
)代替或(||
)(int)s[i]
您可以使用s[i] - '0'
答案 2 :(得分:1)
你需要做
(int)str[i] - '0';
这将给你4而不是40,等等。