【C语言】问题求助:输入一个字符串,内有数字和非数字字符,

2024-10-31 17:26:12
推荐回答(3个)
回答1:

第2个问题,有多个子串,返回第几个子串的位置??= 

以下代码VC6.0测试通过:

#include 

#include 

#include 

#define MAXLINE 81

int getNumber(const char* str, int *&pi)

{

    if( str==NULL || strlen(str)==0 ) return 0;

    int i = 0;

    int n = 0; // 包含整数子串的个数

    char *tmp = (char*)calloc( strlen(str) + 1, sizeof(char) );

    char *p = tmp;

    while(*str++ != '\0' )

    {

        if( *str>='0' && *str<='9' )

        {

            if( *p=='|' )

            {

                p++;

                n++;

            }

            *p++ = *str;

        }

        else

            *p = '|';

    }

    *p = '\0';

    n++;

    pi = (int*)calloc(n, sizeof(int));

    p = strtok(tmp, "|");

    while( p != NULL )

    {

        *(pi + i++) = atoi( p );

        p = strtok( NULL, "|" );

    }

    return n;  // 返回的是包含整数数值的个数

}

int main(int argc, char* argv[], char* env[])

{

    int *pi = NULL;

    char str[MAXLINE] = {0};

    int n = 0, i = 0;

    printf("请输入一个包含整数的字符串:\n");

    gets(str);

    n = getNumber( str, pi );

    printf( "共包含 %d 个整数数值: \n", n );

    for( i = 0; i < n; i++ )

        printf(" %d\n", *(pi + i) );

    free(pi);

    return 0;

}

输入:

132,568a79555+11151%125548&987113#11 46213

输出:

共包含 8 个整数数值:

 32

 568

 79555

 11151

 125548

 987113

 11

 46213

回答2:

#include
#include
main()
{
char s[100]={"123a345bcd567"};
int i,l,j=0;
int a[100]={0};
//gets(s);
l=strlen(s);
printf("字符长%d\n",l);
for(i=0;i if(s[i]>='0'&&s[i]<='9')
{
a[j]=a[j]*10+s[i]-'0';
}
else if(s[i]<'0'||s[i]>'9')
{
if(i ==0);
else if(s[i+1]>='0'&&s[i+1]<='9')
j++;
}
printf("整数个数%d",j+1);
printf("\n数组\n");
for(i=0;i<=j;i++)
printf("%d\n",a[i]);
}

回答3:

#include
#include
char a[100];
int l;
void chongpai(char *p);
int main()
{
int i;
gets(a);
l=strlen(a);
for(i=0;i chongpai(&a[i]);
puts(a);
return 0;
}
void chongpai(char *p)
{
int i;
int a1[25],a2[25],a3[25],a4[25];
int q1=0,q2=0,q3=0,q4=0;
if(*p>=48&&*p<=57)
{a1[q1]=*p;q1++;}
else if(*p>=97&&*p<=122)
{a2[q2]=*p;q2++;}
else if(*p>=65&&*p<=90)
{a3[q3]=*p;q3++;}
else {a4[q4]=*p;q4++;}

for(i=0;i a[i]=a1[i];
for(i=q1;i a[i]=a2[i];
for(i=q1+q2;i a[i]=a3[i];
for(i=q1+q2+q3;i a[i]=a4[i];
}