C语言中的字符串截取函数

/*========================================================  
    子数整数  
    源程序名 num.??? (pas,c,cpp)  
    可执行文件名 num.exe  
    输入文件名 num.in  
    输出文件名 num.out  
    对于一个五位数a1a2a3a4a5,可将其拆分为三个子数:  
    sub1=a1a2a3  
    sub2=a2a3a4  
    sub3=a3a4a5  
    例如,五位数20207可以拆分成  
    sub1=202  
    sub2=020(=20)  
    sub3=207  
    现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,  
    条件是这些五位数的三个子数sub1,sub2,sub3都可被K整除。  
    输入  
    输入由键盘输入,输入仅一行,为正整数K(0<K<1000)。  
    输出  
    输出到文件,输出文件的每一行为一个满足条件的五位数,要求从小到大输出。  
    不得重复输出或遗漏。如果无解,则输出“No”。  
    样例  
    num.in  
    15  
    num.out  
    22555  
    25555  
    28555  
    30000  
    ==========================================================*  
    #include <stdio.h>  
    #include <string.h>  
    char * left(char *dst,char *src, int n)  
    {  
        char *p = src;  
        char *q = dst;  
        int len = strlen(src);  
        if(n>len) n = len;  
           
        while(n--) *(q++) = *(p++);  
        *(q++)='\0';  
        return dst;  
    }  
    char * mid(char *dst,char *src, int n,int m)  
    {  
        char *p = src;  
        char *q = dst;  
        int len = strlen(src);  
        if(n>len) n = len-m;    
        if(m<0) m=0;    
        if(m>len) return NULL;  
        p += m;  
        while(n--) *(q++) = *(p++);  
        *(q++)='\0';  
        return dst;  
    }  
    char * right(char *dst,char *src, int n)  
    {  
        char *p = src;  
        char *q = dst;  
        int len = strlen(src);  
        if(n>len) n = len;  
        p += (len-n);   
        while(*(q++) = *(p++));  
        return dst;  
    }  
    void main()  
    {  
        FILE * p;  
        int i,k,outi,count=0;  
        int sub1,sub2,sub3;  
        char *strsub1,*strsub2,*strsub3,*strtempnum,*a,*b,*c;  
        if((p = fopen("num.out", "ab+")) == NULL)  
        {  
            printf("open file fail!");  
            getch();  
            exit();  
        }  
        printf("Please input int number(0<K<1000):");  
        scanf("%d",&k);  
        for(outi=10000;outi<=30000;outi++)  
        {  
            itoa(outi,strtempnum,10);  
            left(strsub1,strtempnum,3);  
            mid(strsub2,strtempnum,3,1);  
            right(strsub3,strtempnum,3);  
            sub1=atoi(strsub1);  
            sub2=atoi(strsub2);  
            sub3=atoi(strsub3);     
            if((sub1%k)==0 && (sub2%k)==0 && (sub3%k)==0)  
            {  
                fprintf(p,"%d\n",outi);  
                count++;  
                printf("outi=%d\n",outi);  
            }  
            else  
            {  
                fprintf(p,"%s\n","NO");  
            }  
        }  
        printf("Count=%d    OK",count);  
        fclose(p);  
        getch();  
    }  

更多信息:嵌入式开发

转载于:https://www.cnblogs.com/dianzichanpin/p/3613580.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值