这段代码主要是将一串字符中的数字转化成int型,并保存到int型数组中。
容易犯的错误,字符串中的数字在进行判断的时候,容易误漏了单引号,比如 if ((str[i-1]==‘0’)||num!=0),这个在判断的时候误写成str[i-1]==0,导致字符串中的0无法输入到int型数组中,结果花费过长时间才发现。
int main(int argc, char *argv[])
{
char str[128]="0a0120t0*04e506/789b00c98d\n";
int arr[100]={0};
int i,j;
int count=0;
int num=0;
//思路:首先判断当前字符串中的字符是否是数字,
//若是数字的话进行if语句中的操作,
//如果不是,则将num中的数字存储到int型数组中
for(i=0;i<strlen(str);i++){ //将字符串中的数字存储到int型数组中
if(str[i]>47&&str[i]<58){ //48~57是字符串中0~9的ASCII码
num=num*10+str[i]-48;
}else{
if((str[i-1]=='0')||num!=0){
//(str[i-1]=='0')这个主要是判断一串或者单个0,并将这个0存储到Int型数组中
arr[count++]=num;
num=0;
}
}
}
printf("字符串中整数总共有:%d\n",count);
for(j=0;j<count;j++){ //遍历打印int数组内容
printf("%d\t",arr[j]);
}
return 0;
}
运行结果:
字符串中整数总共有:9
0 120 0 4 506 78 9 0 98 请按任意键继续. . .