C语言练习作业(七)

来源:互联网 发布:linux常用命令面试 编辑:程序博客网 时间:2024/04/27 14:03
这个厉害了,题目有点难,是我在纸上推演,写出关键代码,然后再在IDE里面补全的。

题目:输入一个字符串,内含数字和非数字字符,例如:a123x456 17960? 302tab5876,将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1],……。共有多少个整数,并输出这些数。

下面是代码:


#include<stdio.h>#include<string.h>void numberPickup(char *str);int main(){char str[100];printf_s("请输入一串字符,包含数字与非数字:\n");gets_s(str, 99);numberPickup(str);return 0;}void numberPickup(char *str){int isNumber = 0;//记录现在是否在数字范围内int isValueable = 0;//判断现在是否将值赋给数组aint t = 0;//记录字符的数字char *p;//指向字符数组的指针int *q;//指向数字数组的指针int a[100];//记录数字的数组int k = 0;//记下共提取出了多少个数字,便于最后输出p = str;int j = 0;//用来判断,当现在指向非数字字符时,数字是否曾出现过,判断后应归零,不然程序会将下一位字符当数字输出int length = 0;//字符数组的长度length = strlen(str);q = a;for (int i = 0; i <= length; p++, i++){if (*p >= '0'&&*p <= '9'){isNumber = 1;t = (*p - 48) + t * 10;//字符数字转化成纯数字应该减48j++;}else{isNumber = 0;if (j > 0)//如果没有,当第一个字符是非数字时,程序会将第一个字符当数字输出{isValueable = 1;//数字已经记录完毕,可以开始赋值j = 0;}}if (isValueable == 1)//开始赋值{*q = t;q++;t = 0;k++;isValueable = 0;}}for (int i = 0; i < k; i++){printf_s("%d  ", a[i]);}}


0 0
原创粉丝点击