C语言提取数字的问题,包含了指针

从一个由数字和非数字字符组成的文本文件中,逐行读入到一个一维字符数组中,将其中连续的数字作为一个整数,依次存放到一个整数数组a中。统计共有多少个整数,输出这些整数。
文本文件位置“C/学习/C语言/7.txt",输出位置”C/学习/C语言/答案.txt"
求高手指教啊

#include <iostream>
using namespace std;
int main()
{char str[50],*pstr;
 int i,j,k,m,e10,digit,ndigit,a[10],*pa;
 cout<<"input a string:"<<endl;
gets(str);//如输入adb1d564/64-12=afd60 假设这里的字符串从7.txt读取出来的
cout<<endl;
pstr=&str[0];    //字符指针pstr指向数组str首元素 
pa=&a[0];        //指针pa指向a数组首元素
ndigit=0;        //ndigit代表有多少个整数 
i=0;             //i代表字符串中的第几个字符/
j=0;             //j代表连续数字的个数
while(*(pstr+i)!='\0')
 {  if((*(pstr+i)>='0') && (*(pstr+i)<='9'))
         j++;
    else
{
  if (j>0)
   {
  digit=*(pstr+i-1)-48;          // 取个位数
                  k=1;
                  while (k<j)     //将含有两位数以上的其它位的数值累计于digit
  { e10=1;
                    for (m=1;m<=k;m++)
                       e10=e10*10;                  //e10代表当前位数乘当前位数
                       digit=digit+(*(pstr+i-1-k)-48)*e10;  //  累加十位数
                       k++;                         //位数k自增
 }
               *pa=digit;//将数值放在数组a中
               ndigit++; //发现数字就自增
               pa++; //指针pa指向a数组下一元素,以接受下一个(组)数字
               j=0;//将j重置为0,以便继续再找数字
 }
}

  i++;//使指针往查找直至找到有数字
 }


//对字符串后面有数字的情况作处理:
 if (j>0)                         //以数字结尾字符串的最后一个数据
  {digit=*(pstr+i-1)-48;          //将个数位赋予digit
   k=1;
   while (k<j)          // 将含有两位以上数的其它位的数值累加于digit
    {e10=1;
     for (m=1;m<=k;m++)
       e10=e10*10;            //e10代表位数所应乘的因子
     digit=digit+(*(pstr+i-1-k)-48)*e10;  //将该位数的数值累加于digit
     k++;  /*位数K自增*/
    }
   *pa=digit;                 //将数值放到数组a中
   ndigit++;
   j=0;
  }

  printf("There are %d numbers in this line. They are:\n",ndigit);
  j=0;
  pa=&a[0];
  for (j=0;j<ndigit;j++)            //打印数据
    cout<<*(pa+j)<<endl;
  cout<<endl;
  return 0;
}

追问

谢谢你的回答,不过你的这个不包含指针啊,重点是指针,能编辑下吗

追答

难道*pstr ,*pa 这些不是指针?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-15
这题其实还是很简单的。追问

。。。。。。
来点实质性的

追答

简单,自己看看吧。

#include<stdio.h>
#include<string.h>

int count = 0;

void GetNum(char* buff,int* a)
{
int Length = 0;
int i,score;
bool is_num = false;

Length = strlen(buff);
score = 0;

for(i=0; i<Length; i++)
{
if(buff[i]>='0' && buff[i]<='9')
{
score = score*10 + buff[i] - '0';
is_num = true;
}
else if(is_num == true)
{
a[count] = score;
count++;
score = 0;
is_num = false;
}
}

if(is_num == true)
{
a[count] = score;
count++;
is_num = false;
}
}

void main()
{
FILE *pFile = NULL;
char buff[1024];
int a[1000];
int i;

if((pFile=fopen("C/学习/C语言/7.txt","r")) == NULL) 
{
printf("数据源文件打开失败!\n");
return;
}

while(!feof(pFile))
{
fgets(buff,1023,pFile);
GetNum(buff,a);
}
fclose(pFile);

if((pFile=fopen("C/学习/C语言/答案.txt","w")) == NULL) 
{
printf("保存数据文件打开失败!\n");
return;
}
for(i=0; i<count; i++)
fprintf(pFile,"%d\n",a[i]);
fclose(pFile);
printf("数据保存成功!\n");

return;
}

本回答被提问者采纳
相似回答