C 检查它是字符还是整数
这是一个整数数组:C 检查它是字符还是整数,c,char,int,C,Char,Int,这是一个整数数组: int values[] = { 75, '*', 5,'-' }; for(i=0 ; i<size ; i++){ // Here } int值[]={75',*',5',-'}; 对于(i=0;i您不能。至于编译器,常量42和'*'是一个相同的。在编译的目标代码中,它们都表示为整数42 如果需要区分整数和字符,请使用指示值类型的布尔标志或枚举,或者将整数和字符保留在单独的数组中 请注意,在C++中,但不是在C中,有一个细微的差别: 42代码>代码>类型
int values[] = { 75, '*', 5,'-' };
for(i=0 ; i<size ; i++){
// Here
}
int值[]={75',*',5',-'};
对于(i=0;i您不能。至于编译器,常量42
和'*'
是一个相同的。在编译的目标代码中,它们都表示为整数42
如果需要区分整数和字符,请使用指示值类型的布尔标志或枚举,或者将整数和字符保留在单独的数组中
请注意,在C++中,但不是在C中,有一个细微的差别:<代码> 42代码>代码>类型>代码> int >代码>,而代码> > * >代码>类型>代码> char < />代码>,因此可以使用重载函数或模板来区分这个事实。 下去是一条危险的道路。进入:
那么,当你看到数字42时……它是什么?它是“*”
字符,还是你实际上指的是数字42
您也不能依赖类型转换,因为您的所有值都将转换为int
s,因为它们存储在整数数组中。您最好的选择是创建一个同时保存类型和值的结构,如下所示:
typedef struct
{
int type; //0 for int, 1 for operator, and so forth.
int value; //holds either a character code or an integer value
//you could use a union here, if you felt it would make things cleaner...
} Token;
然后检查令牌的类型只需查看token.type
希望这有帮助
PS:作弊的答案是使用一种动态类型的语言。你的工作少很多,但速度较慢,我不知道你是否可以选择它。你的数组元素不能是简单的整数。
请尝试以下方法:
enum ElementType {INTEGER, OPERATION};
struct ArrayElement {
enum ElementType etype;
int evalue;
};
struct ArrayElement values[] = {
{INTEGER, 75}, {OPERATION, '*'}, {INTEGER, 5}, {OPERATION, '-'}
};
for (i = 0; i < sizeof values / sizeof *values; i++) {
/* Here */
switch (values[i].etype) {
default: printf("unrecognized type. value is %d.\n", values[i].value);
break;
case INTEGER: printf("INTEGER with value %d.\n", values[i].value);
break;
case OPERATION: printf("OPERATION with value '%c'.\n", values[i].value);
break;
}
}
enum ElementType{INTEGER,OPERATION};
结构阵列{
枚举元素类型etype;
综合评价;
};
结构数组元素值[]={
{INTEGER,75},{OPERATION,'*'},{INTEGER,5},{OPERATION,'-'}
};
对于(i=0;i
'-'是运算,45同时作为整数可以,但我怎么知道它的45或'-'?你不能。当你同时拥有'-'
&45
时,-
的ascii值存储在数组中。因此,有两个45
,你无法区分这两个。此外,问题中还有一个输入错误。values
应该是一个数组。你应该问一下你真正的问题。可能你正在解析一些输入,在这种情况下,数字和运算符都是以字符序列的形式出现的,并且可以区分。我不能!!,,你的意思是没有办法绕过它吗C@Rami:解决问题的方法是重新设计代码。不要使用int
数组,使用包含所需信息的更复杂结构。
enum ElementType {INTEGER, OPERATION};
struct ArrayElement {
enum ElementType etype;
int evalue;
};
struct ArrayElement values[] = {
{INTEGER, 75}, {OPERATION, '*'}, {INTEGER, 5}, {OPERATION, '-'}
};
for (i = 0; i < sizeof values / sizeof *values; i++) {
/* Here */
switch (values[i].etype) {
default: printf("unrecognized type. value is %d.\n", values[i].value);
break;
case INTEGER: printf("INTEGER with value %d.\n", values[i].value);
break;
case OPERATION: printf("OPERATION with value '%c'.\n", values[i].value);
break;
}
}