输入一个字符串,内有数字和非数字字符,例如:
A123x456 17960? 302tab5876
将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。
方法一:
#include <stdio.h>
#include <math.h>
void output(char *s, int n); //声明输出函数
int main()
{
char str[30]={0};
printf("Please enter string: "); //输入字符串
gets(str);
output(str, 30); //调用输出函数
return 0;
}
//输出函数
void output(char *s, int n)
{
char *i;
int j, k, t, m, temp[10], num;
double sum, a[30];
for (i=s, num=0, j=0, m=0; i<s+n; i++)
{
if (*i>='0'&&*i<='9') num=1, temp[j++]=(int)(*i-'0');
else if (num)
{
for (num=0, k=0, sum=0, t=j-1; k<j; sum+=temp[k]*pow(10, t), t--, k++);
a[m++]=sum, j=0;
}
}
for(j=0, printf("There is %d number in the string.\nResult: ", m); j<m; printf("%.0f ", a[j++]));
printf("\n");
}
在VS2019下,需将源文件的gets做些修改:
#include <stdio.h>
#include <math.h>
void output(char* s, int n); //声明输出函数
int main()
{
char str[30] = { 0 };
printf("Please enter string: "); //输入字符串
gets_s(str, 30);
output(str, 30); //调用输出函数
return 0;
}
//输出函数
void output(char* s, int n)
{
char* i;
int j, k, t, m, temp[10], num;
double sum, a[30];
for (i = s, num = 0, j = 0, m = 0; i < s + n; i++)
{
if (*i >= '0' && *i <= '9') num = 1, temp[j++] = (int)(*i - '0');
else if (num)
{
for (num = 0, k = 0, sum = 0, t = j - 1; k < j; sum += temp[k] * pow(10, t), t--, k++);
a[m++] = sum, j = 0;
}
}
for (j = 0, printf("There is %d number in the string.\nResult: ", m); j < m; printf("%.0f ", a[j++]));
printf("\n");
}
方法二:(利用动态内存分配)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void print(char *p_char);
int main()
{
char *string;
string=(char *)malloc(80*sizeof(char));
printf("Please enter string: ");
gets(string);
print(string);
return 0;
}
void print(char *p_char)
{
int word, i, j, n=(int)strlen(p_char);
char *p, *num[30];
int q;
for (i=0; i<20; num[i++]=(char*)malloc(30*sizeof(char)));
for (p=p_char, word=0, i=0, j=0; p<p_char+n; p++)
{
if (*p>='0'&&*p<='9')
{
word=1;
num[i][j]=*p;
q=num[i][j];
j++;
}
else if (word==1)
{
q=num[i][j];
num[i++][j]='\0';
j=0;
word=0;
}
}
int k;
if(q>='0'&&q<='9')
k=i+1;
else
k=i;
num[i][j]='\0';
printf("There are %d numbers in the string.\n", k);
for (j=0; j<i+1; puts(num[j++]));
}
在VS2019下,需将源文件的gets做些修改:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void print(char* p_char);
int main()
{
char* string;
string = (char*)malloc(80 * sizeof(char));
printf("Please enter string: ");
gets_s(string, strlen(string));
print(string);
return 0;
}
void print(char* p_char)
{
int word, i, j, n = (int)strlen(p_char);
char* p, * num[30];
int q;
for (i = 0; i < 20; num[i++] = (char*)malloc(30 * sizeof(char)));
for (p = p_char, word = 0, i = 0, j = 0; p < p_char + n; p++)
{
if (*p >= '0' && *p <= '9')
{
word = 1;
num[i][j] = *p;
q = num[i][j];
j++;
}
else if (word == 1)
{
q = num[i][j];
num[i++][j] = '\0';
j = 0;
word = 0;
}
}
int k;
if (q >= '0' && q <= '9')
k = i + 1;
else
k = i;
num[i][j] = '\0';
printf("There are %d numbers in the string.\n", k);
for (j = 0; j < i + 1; puts(num[j++]));
}