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

输入一个字符串,内有数字和非数字字符,例如:a123x456 17960? 302tab58768。将其中连续的数字作为一个整数,依次存放到数组a中。例如123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。
要求:(1)在主函数中输入字符串,输出结果。调用子程序处理字符串。
(2)子函数的返回值为-1表示为找到,否则返回子串的位置

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

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

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

#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

追问

不好意思 是-1表示未找到 返回子串位置是返回每个子串位置

追答

以下代码在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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-22
#include <stdio.h>
#include <string.h>
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<l;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]);
}
第2个回答  2019-12-03
#include <string.h>
#include <stdio.h>
char a[100];
int l;
void chongpai(char *p);
int main()
{
int i;
gets(a);
l=strlen(a);
for(i=0;i<l;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<q1;i++)
a[i]=a1[i];
for(i=q1;i<q1+q2;i++)
a[i]=a2[i];
for(i=q1+q2;i<q1+q2+q3;i++)
a[i]=a3[i];
for(i=q1+q2+q3;i<q1+q2+q3+q4;i++)
a[i]=a4[i];
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网