10.16输入一个字符串,内有数字和非数字字符,如: a123x456 17960? 302tab5876 将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。
10.16输入一个字符串,内有数字和非数字字符,如:
a123x456 17960? 302tab5876
将其中连续的数字作为一个整数,依次存放到一数组num中。例如123放在num[0]中,456放在num[1]中……统计共有多少个整数,并输出这些数。
#include <stdio.h> int main(){ void search(char * parr, int * pnum); char arr[100],* parr; int num[30],* pnum; parr=arr; pnum=num; printf("请输入一个包含数字的字符串\n"); gets(arr); //统计字符串中整数的个数(连续数字作为一个整数),并放到一个数组中 search(parr, pnum); return 0; } void search(char * parr, int * pnum){ int i=0,j=0,x=0; while( *(parr+i) !='\0' ){ if(*(parr+i) >= '0' && *(parr+i) <= '9' ) j++;//j表示数字的位数 else if(j>0){//碰到字母,并且之前的是数字 int digit,k,m,e10; digit = * (parr+i-1)-48; //个位上的值 k=1; while(k<j){ //整数的位数大于1的话 e10=1; for(m=1; m<=k; m++){ e10=10*e10; } digit += (* (parr+i-1-k)-48)*e10; k++; } *(pnum+x)=digit; x++; j=0; } i++; } //如果字符串末尾是数字的话,需要在while循环外边判断 if(j>0){ int digit,k,m,e10; digit = * (parr+i-1)-48; //个位上的值 k=1; while(k<j){ //整数的位数大于1的话 e10=1; for(m=1; m<=k; m++){ e10=10*e10; } digit += (* (parr+i-1-k)-48)*e10; k++; } *(pnum+x)=digit; x++; } printf("该字符串共有%d个整数,分别为:\n",x); for(i=0; i<x; i++){ printf("%-8d",*(pnum+i)); } printf("\n"); }
结果: