首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

自己编一段代码十分不理想 希望 有注释 绝对结贴

2012-05-28 
自己编一段代码十分不理想 希望高手指点有注释 绝对结贴希望最好能在我的算法基础上修改,不然我水平太低看

自己编一段代码十分不理想 希望高手指点 有注释 绝对结贴
希望最好能在我的算法基础上修改,不然我水平太低看不懂  
程序无目的是 输入一段字符串 将其中的整数取出 取出后以整数形式储存(不考虑单字符'0'因素的存在,如a0a)
样例:
输入: 1232+ 234,23123 231as231 45
输出: 1232 234 23123 231 231 45  

C/C++ code
#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];
若哪里注解不够详细可以 回帖 也可以联系我的qq14344545 绝对结贴

[解决办法]
类似48 < (int)shuru[i1] && (int)shuru[i1] < 57这样的写法,应该是
48 <= (int)shuru[i1] && (int)shuru[i1] <= 57
吧?
[解决办法]
C/C++ code
#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;
}
这样就搞定了。
[解决办法]
C/C++ code
for(i = 0;jisuan[i] == 0;i++)

[解决办法]
http://topic.csdn.net/u/20110223/15/3fd75e15-fe7d-432b-8b6c-c048ddec20a0.html

热点排行