列出输入字符串中的整数

来源:互联网 发布:淘宝开店描述一下你的小铺怎么写 编辑:程序博客网 时间:2024/04/29 03:04

问题描述:

输入一个字符串,内有数字和非数字字符,如:

  a123x456 34x>302addfds46

要求将其中连续的数字作为一个整数,依次存放到数组a中。并输出这些证书。


源代码:

#include<stdio.h>

int a[10]; //定义全局数组

int find(char *str)
{  //将字符串str中证书放在数组a中,并返回证书的个数
    int i=0,j=0,k,digit,m,e,num = 0;
    while(*(str+i) != '\0')
    {
        if((*(str+i) >= '\0')&&(*(str+i) <= '9'))
            j++;
        else if(j>0)
        {
            digit = *(str+i-1)-48;  //将连续数字的个数为赋予digit
            k=1;
            while(k<j)  //若d连续数字个数大于2,将其他为数值累加与digit
            {
                e=1;
                for(m=1;m<=k;m++)
                    e*=10;
                digit +=(*(str+i-1-k)-48)*e;
                k++;
            }
            a[num] = digit;
            num++;
            j=0;
        }
        i++;
    }

    if(j>0)
    {
        digit = *(str+i-1)-48;
        k=1;
        while(k<j)
        {
            e=1;
            for(m=1;m<=k;m++)
                e*=10;
            digit += (*(str+i-1-k)-48)*e;
            k++;
        }
        a[num] = digit;
        num++;
    }
    return num;
}


void main()
{
    char str[50];
    int n;
    printf("input a string:\n");
    gets(str);
    n = find(str);
    printf("There are %d numbers in the string. They are:\n",n);
    for(int i=0;i<n;i++)
        printf("%d\t",a[i]);
}


上面的代码是书上的方法,我觉得十分繁琐和复杂,简单的问题复杂化了,但另一方面,更加锻炼了逻辑和算法。。。- -


源代码二:

#include <ctype.h>
#include <stdio.h>

int main ()
{
int i;
char str [ 256 ];
int a [ 20 ];
int num, alpha;

printf ( "input a string contains alnum\n" );
gets ( str );

for ( i = 0, num = 0, alpha = 1; str [ i ]; i ++ )
{
    if ( isdigit ( str [ i ] ) )
    {
        if ( alpha )
             alpha = a [ num ] = 0;
        a [ num ] *= 10;
        a [ num ] += str [ i ] - '0';
    }
    else if ( ! alpha )
    {
        num ++;
        alpha = 1;
    }
}

if ( ! alpha ) num ++;

printf ( "\n there is %d numbers:\n", num );
for ( i = 0; i < num; i ++ )
printf ( " %d\n", a [ i ] );

return 0;
}


这是选自百度一位老兄的,简单了许多,运用到了ctpye库中的函数。


源代码三:

#include<stdio.h>
#include<ctype.h>

int main()
{
    int a[20];
    char ch;
    int i=0,j;
    while((ch = getchar()) != '\n')
    {
        if(isdigit(ch))
        {
            a[i] = ch-48;
            i++;
        }
    }
    for(j=0;j<i;j++)
        printf("%4d",a[j]);
    return 0;
}


这是我后来写的,更加简洁了一些,当然输出结果略有些差异。


0 0