自己编一段代码十分不理想 希望高手指点 有注释 绝对结贴
希望最好能在我的算法基础上修改,不然我水平太低看不懂
程序无目的是 输入一段字符串 将其中的整数取出 取出后以整数形式储存(不考虑单字符'0'因素的存在,如a0a)
样例:
输入: 1232+ 234,23123 231as231 45
输出: 1232 234 23123 231 231 45
#include<stdio.h>#include<string.h>#include<math.h>void shu(char shuru[]);int main(){ extern char shuru[500]; extern int n; extern int jisuan[500]; int i; gets(shuru); n = strlen(shuru); shu(shuru); for(i = 0;jisuan[i] == 0;i++) printf("%d ",jisuan[i]); return 0;}void shu(char shuru[]){ int i1,i2,i3=0,i4=0,m=1,sc; extern int jisuan[500],n; extern int p,q; do { for(i1 = 0;i1 < n;i1++) //从字符串第一个开始向后面寻找 { if(48 < (int)shuru[i1] && (int)shuru[i1] < 57 && m==1) //如果ascll值大于48小于57 并且前面的不是数字 { p = i1; //就将字符串角标记下 m = 0; //引入变量m以确定从此处开始时数字 } else if(48 < (int)shuru[i1] && (int)shuru[i1] < 57 && m==0) //如果ascll值小于于48大于57 并且前面的是数字 { q = i1; //就将字符串角标记下 m = 1; //引入变量m以确定从此处开始不是数字 break; //跳出循环 } } sc = q - p; //计算数字位数 for(i2 = sc;i2 > 0;i2--,i4++) jisuan[i3] = jisuan[i3] + ((int)shuru[p+i4]%48)*pow(10,i2);//将数组中是数字数乘以它的数级并相加,将结果赋给的jisuan数组 i3++; }while(i1 > n); //知道刚刚的for循环全部结束 不然继续循环}int p,q;int n;int jisuan[500]={0};char fuhao[250],shuru[500];#include <stdio.h>void foo(char *p){ char *q=p; int flag=0; //0:first not number for print space; while(*q!='\0'){ if(*q>='0'&&*q<='9'){ printf("%c",*q); flag=0; //first non-number; } else{ if(flag==0){ printf(" "); flag=1;// more non-number; } } q++; } printf("\n");}int main(){ char *p="10 39u 30 lkj3jkj43243kllk42342"; foo(p);}
[解决办法]
每个字符用if('1'<=ch && ch <='9') 然后输出就行了啊。
[解决办法]
#include<stdio.h>
#include<ctype.h>
int main(void)
{
char ch;
int i=0;
while((ch=getchar())!='\n')
{
if(isdigit(ch))
{
printf("%c",ch);
i=0;
}
else
{
if(i==0)
printf(" ");
i=1;
}
}
getchar();
return 0;
}
这样就搞定了。
[解决办法]
for(i = 0;jisuan[i] == 0;i++)
[解决办法]
http://topic.csdn.net/u/20110223/15/3fd75e15-fe7d-432b-8b6c-c048ddec20a0.html