//输入一个字符串,将连续的数字字符串放到另一个二维数组中
int Find_number(char a[], char ch[][20]){
//a1265bb1234
/*思路:
1.外层用*a指针变量来控制循环
2.定义char *na 在内层变化找一段数字字符
3.判断是不是连续的
4.找到了就拷贝到ch数组 用一个变量控制ch数组下标
*/
char *na = a, row=0;
while (*a){
na = a;//让na去改变
while (*na >= '0'&&*na <= '9'){
na++;//指向非数字字符的结束
}
if (na == a)a++;
else {//否则就指向了数字字符 判断na-a之间经历的这几个数字字符是不是连续的
char *temp = a,flag=0;//flag=1 拷贝
//判断是不是升序连续的
//na-1避免temp+1等于na
for (temp; temp < na-1; temp++){
//解释 前一个+1不等于后一个数那么就不是升序连续
if ((*temp+1)!= *(temp + 1))break;
}
if (temp == na - 1){//说明是升序连续
flag = 1;
}
else {//否则判断是不是降序连续
temp = a;//从新赋值
for (temp; temp < na - 1; temp++){
//解释 前一个-1不等于后一个数那么就不是降序连续
if ((*temp - 1) != *(temp + 1))break;
}
if (temp == na - 1) flag = 1;//说明是降序连续
}
if (flag == 1){//完成拷贝功能
//na-a指针-指针代表指针之间经历的元素个数
strncpy(ch[row++], a, na - a);
}
if (na == '\0')break;//如果na指向了'\0'就不用下面赋值了
a = na + 1;//na指向的是非数字字符 +1指向下一个没判断的 赋给a
}//else_end
}//while_end
return row;//返回个数
}
int main(){
char a[100];
char ch[10][20] = { 0 };
printf("请输入一串字符内包含连续数字:\n");
gets(a);
int row=Find_number(a, ch);
printf("提取出来的数字字符串是:\n");
for (int i = 0; i <row; i++){
printf("串%d: %s\n",i+1, ch[i]);
}
return 0;
}
思路:
1.外层用*a指针变量来控制循环
2.定义char *na 在内层变化找一段数字字符
3.判断是不是连续的
4.找到了就拷贝到ch数组 用一个变量控制ch数组下标