#include
#include
void output(char *s, int n); //定义输出函数
int main()
{
char str[30];
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
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 a[m++]=sum, j=0; } for(j=0, printf("There is %d number in the string.\nResult: ", m); j printf("\n"); } printf()函数用法: printf()函数的调用格式为:printf("<格式化字符串>",<参量表>)。 其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。 参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应,否则将会出现意想不到的错误。 比如: int a=6789; printf("a=%d\n",a); 输出结果为a=6789。扩展资料:
void search(char *p1,double *p2,int *p3)
{
int i,j,k,h,n=0;
double sum=0;
int a[10];//定义一个数组存储每次检验得到的字符串中的整形数字
k=strlen(p1);//计算出输入的字符串的长度
for (i=0,j=0;i
if(*(p1+i)>='0' && *(p1+i)<='9')
{
a[j]=*(p1+i);
j++;//变量j用于记忆连续检测到的整数个数
}
/* //1. 修改
else if(i!=0)//当遇到字符串中的一个非整数的字符时,执行以下操作
{
for(h=0;h
*/
else if(j!=0)
{
for(h=j-1;h>=0;h--)
sum+=(a[j-h-1] - '0')*pow(10,double(h));//计算之前检测到的整数
*(p2+n)=sum;//将之前得到的这个数存入数组*(p2+n)即num[]数组
sum=0;//将sum归零,以便下一次检测到整数时再使用
n++;//n自加1以方便下次存储检测到的整数
j=0;//将j归零以方便下一次检测到整数时进行记忆
}
else continue;//如果字符串中的第一个字符就不是整数,
} //那么就直接跳出本次循环进行下一个字符的检测
// 2. 增加
if (j != 0)
{
for(h=j-1;h>=0;h--)
sum+=(a[j-h-1] - '0')*pow(10,double(h));//计算之前检测到的整数
*(p2+n)=sum;//将之前得到的这个数存入数组*(p2+n)即num[]数组
n++;
}
/*// 3. 修改
*(p3)=n+1;//记忆检测到的整数个数,“传回”主函数
*/
*(p3)=n;
}
对你的代码做了3处修改。分别说明如下:
1. 判断条件的修改,原条件无法判断两个数字中间的非字符数大于1的情况
循环变量h由递增改为递减,因为数组a中,下标从小到大分别表示的是从高位到低位,比如123保存在a中,那么a[0]保存的是百位
增加了一个乘法,因为pow只能计算该位置的单位,而不能表示具体数值,比如321,pow只能计算出100 + 10 + 1
为什么要减去'0',因为a中保存的是字符,而不是整数。
2. 增加了一次循环,如果字符串不是以非数字字符结尾,那么,最后一次读到数组a中的数据则无法u取出
3. 函数第三个参数的赋值修改为n而不是n+1,每次读完一个数字,n自动完成了加1,因此最后无需再对其进行加1操作
if (*p>='0' && *p<='9')
{
a[i]=a[i]*10+(*p-'0');//a数组存放字符串中的数字,如果数字字符连续出现,则a数组的下标不变。
p++;
sum++;//计算数字个数
}
这一段中连续数字字符每处理一个就sum++;了,按要求是一个整数sum增1一次;char a[10]={0};这个声明也有问题,a的元素只有1字节,绝大多数整都放不下。所以再没有往下看,写得也太复杂,下面提供一个作参考……
//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
int main(void){
char s[]="A123x56 17960?302tab5876";
int a[1000],i,j,k,ln=strlen(s);
for(j=k=i=0;isscanf(s+i,"%d%n",&a[j],&k);
if(k) j++;
i+=k;
k=0;
}
printf("Found %d integer(s) in the string:\n",j);
for(k=0;kprintf("\n");
return 0;
}
char cMix[100]="sdf34534hjkljk56365jhl huo4578bhj45t";
char *pChar=cMix;
int Integer[10][16];//最多只能10组数字,每组最多15个数字字符。
int j,i=0;//整数数组下标
while(*pChar)//混合字符串未结束
{ if(!isdigit(*pChar)) //*pChar不是数字
{pChar++; continue;}
j=0;//新组第一个数字
while(isdigit(*pChar)&&j<14)//*pChar是数字&&j<14
{Integer[i][j++]=*pChar; pChar++;}
Integer[i][j]='\0' ;//字符串结尾标志
i++;//准备下一个数字组
}