输入一个字符串,内有数字和非数字字符,例如:hi123x46634cat>302hello46xiamen,要求将其中连续的非数字存放到一个指针数组char*str[10]中,例如:”hi”存到str[0],”x”存到str[1]中,”>“存到str[2]中……并输出这些字符串。用指针处理。
一下是我写的,尝试了好几种方法,放弃了,有哪位能帮忙看看
考察ASCII的使用,'0' 对应 48(0x30) 至 ’9‘ 对应57(0x39)。
不用数组的时候
#include <stdio.h>
int main() {
char content[100];
int i, j;
int count; // 统计数字和空格
int row;
char str[10][10]={0}; // 带初始化
char const *p = content;
char e;
puts("输入一行内容");
scanf("%[^\n]%*c", content);
j = row = count = 0;
for (i = 0; *(p + i) != 0; i++) {
e = *(p + i);
// 如果是数字或者空格,跳过
if (e > 47 && e < 0x3A || e == 0x20) {
count++; // 每个间隔里的长度
j = 0;
continue;
}
if (count > 0) {
row++;
count = 0; // 下一次重新算
}
*(str[row]+j) = e;
j++;
}
putchar(10);
for (i = 0; i < 10 && str[i][0]!=0; i++)
printf("%s\n", str[i]);
return 0;
}
先把程序走通,再考虑优化。用指针处理可能繁琐些,比如把现在的结果一个一个赋值过去。
没想到什么方法,问题同 https://tieba.baidu.com/p/8135904411,等你老师给答案了记得发一个过去。😀