看一下这个c程序(解决了给100分)!

deity666 2003-08-30 07:58:45
题:输入一个字符串,内有数字和非数字字符,如:
a123x456 17960?302tab5876
将其中连续的数字作为一个整数,依次存放到一数组a中,例如123放在a[0]中,456放在 a[1]中..........统计共有多少整数,并输出这些数。用C语言做。
我是怎么做的:
#include <stdio.h>
void main()
{
char m[100];
scanf(" %s", m);
char num[10][10];
int i, j = 0, n = 0, k;
while (*(m + n) != '\0')
{
if (*(m + n) >= '0' && *(m + n) <= '9')
{
for (i = 0; (*(m + n) > '9') && (*(m + n) < '0'); i++)
{
num[j][i] = m[n];
n++;
}
*(*(num + j) + i + 1) = '\0';
j++;
}
n++;
}
for (k = 0; k < j; k++)
printf("%s\n", *(num + k));
}
请高手帮我看看,我哪里错了,本人刚学习不久,程序编的不规范,如果看不明白,给我写个标准答案也行,我看明白就给100分,决不食言。

...全文
53 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzb1000 2003-08-30
  • 打赏
  • 举报
回复
抗议啊
yzb1000 2003-08-30
  • 打赏
  • 举报
回复
我是直接改的撒
Salam2001 2003-08-30
  • 打赏
  • 举报
回复
我觉得这个题目用不着动真刀真枪的!
我改的程序运行通过, 只要将那个 printf("%s\n", n[i]); 里面的 n 改成 num 就行了.
楼主只要将那些数组表示用指针表示就是你自己的原来的程序了.
deity666 2003-08-30
  • 打赏
  • 举报
回复
呵呵,只是用指针的形式表示了数组,谢谢大家了
great_chenliang 2003-08-30
  • 打赏
  • 举报
回复
应试教育还强迫把数组用指针表示啊?!

是啊,太无聊了。应该什么自然用什么。
deity666 2003-08-30
  • 打赏
  • 举报
回复
把你程序改了一下,正确了#include <stdio.h>
void main()
{
char m[100];
scanf(" %s", m);
char num[10][10];
int i, j = 0, n = 0, k;
while (*(m + n) != '\0')
{
if (*(m + n) >= '0' && *(m + n) <= '9')
{
for (i = 0; (*(m + n) <= '9') && (*(m + n) >= '0'); i++)
{
num[j][i] = m[n];
n++;
}
*(*(num + j) + i + 1) = '\0';
j++;
}
n++;
}
for (k = 0; k < j; k++)
printf("%s\n", *(num + k));

great_chenliang 2003-08-30
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>

int main (void)
{
char m[100];
char num[10][10]={{0}};
int i,k=0,j=0;

scanf("%s", m); /* ! */

for(i=0;i<100;i++)
if(*(m+i)>='0' && *(m+i)<='9')
*(*(num+k)+j)=*(m+i), j++; /* ! */
else
k+=(j!=0), j=0; /* ! */

for (i=0,k=0; **(num+k)!='\0'; i++,k++)
printf("%s\n", num[k]);

printf("total %d integer(s)\n", i);

system("pause");

return 0;
}
luofuliang 2003-08-30
  • 打赏
  • 举报
回复
上面那位怎么说调试正确呢?
我这里不行握
Salam2001 2003-08-30
  • 打赏
  • 举报
回复
应试教育还强迫把数组用指针表示啊?! 呵呵
搬不搬砖 2003-08-30
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
char m[100];
scanf(" %s", m);
char num[10][10];
int i, j = 0, n = 0, k;
while (*(m + n) != '\0')
{
if (*(m + n) >= '0' && *(m + n) <= '9')
{
for (i = 0; (*(m + n) >= '0') && (*(m + n) <= '9'); i++)///////////////////////////////////
{
num[j][i] = m[n];
n++;
}
num[j][i] = '\0';/////////////////////////////
j++;
}
n++;
}
for (k = 0; k < j; k++)
printf("%s\n", *(num + k));
}
great_chenliang 2003-08-30
  • 打赏
  • 举报
回复
其实自己重写一个,远要比看懂别人的程序来得简单。楼主你就将就将就吧。
deity666 2003-08-30
  • 打赏
  • 举报
回复
谢谢大家,我正在看呢?不过是老师让用指针做的
yzb1000 2003-08-30
  • 打赏
  • 举报
回复
都好快啊
luofuliang 2003-08-30
  • 打赏
  • 举报
回复
那能否在原文基础上修改就行呢,各位?
另外,原文编译时的出错信息很怪的!
yzb1000 2003-08-30
  • 打赏
  • 举报
回复
调试正确
#include <stdio.h>
void main()
{
char m[100]="a123b4c6";
// scanf(" %s", m);
char num[10][10];
int i, j = 0, n = 0, k;
while (*(m + n) !='\0')
{

if (*(m + n) >= '0' && *(m + n) <= '9')
{

for (i = 0; (*(m + n)>='0') && (*(m + n) <= '9'); i++)
{
num[j][i] = m[n];
n++;
}
*(*(num + j) + i) = '\0';
j++;

}
n++;
}
for (k = 0; k < j; k++)
printf("%s\n", *(num + k));
}
Salam2001 2003-08-30
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<ctype.h>

void main()
{
char m[100];
scanf(" %s", m);
char num[10][10];
int i, j = 0, n = 0;
while(m[n])
{
if(isdigit(m[n]))
{
for (i = 0; isdigit(m[n]); i++)
{
num[j][i] = m[n];
n++;
}
*(num[j] + i) = '\0';
j++;
}
n++;
}
for (i = 0; i < j; i++)
printf("%s\n", n[i]);
}

库函数isdigit()就是用来判断数字的.
没必要在定义个k, 变量用完了还可以在利用.
再就是尽量别用 Tab 键产生空格, 以免在不同的环境代码看起来很乱.
没运行过, 你自己试试吧 :)
Salam2001 2003-08-30
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<ctype.h>

void main()
{
char m[100];
scanf(" %s", m);
char num[10][10];
int i, j = 0, n = 0;
while(m[n])
{
if(isdigit(m[n]))
{
for (i = 0; isdigit(m[n]); i++)
{
num[j][i] = m[n];
n++;
}
*(num[j] + i) = '\0';
j++;
}
n++;
}
for (i = 0; i < j; i++)
printf("%s\n", n[i]);
}

库函数isdigit()就是用来判断数字的.
没必要在定义个k, 变量用完了还可以在利用.
再就是尽量别用 Tab 键产生空格, 以免在不同的环境代码看起来很乱.
没运行过, 你自己试试吧 :)
idontlikenickname 2003-08-30
  • 打赏
  • 举报
回复


这是上边用到的两个库函数的用法帮助~

函数名: strcspn
功 能: 在串中查找第一个给定字符集内容的段
用 法: int strcspn(char *str1, char *str2);
程序例:

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

int main(void)
{
char *string1 = "1234567890";
char *string2 = "747DC8";
int length;

length = strcspn(string1, string2);
printf("Character where strings intersect is at position %d\n", length);

return 0;
}


函数名: strspn
功 能: 在串中查找指定字符集的子集的第一次出现
用 法: int strspn(char *str1, char *str2);
程序例:

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

int main(void)
{
char *string1 = "1234567890";
char *string2 = "123DC8";
int length;

length = strspn(string1, string2);
printf("Character where strings differ is at position %d\n", length);
return 0;
}

great_chenliang 2003-08-30
  • 打赏
  • 举报
回复
你为什么偏要用指针形式呢?自找麻烦。你看看这样对了吗?

#include<stdio.h>
#include<stdlib.h>

int main (void)
{
char m[100];
char num[10][10]={{0}};
int i,k=0,j=0;

scanf("%s", m); /* ! */

for(i=0;i<100;i++)
if(m[i]>='0' && m[i]<='9')
num[k][j]=m[i], j++; /* ! */
else
k+=(j!=0), j=0; /* ! */

for (i=0,k=0; num[k][0]!='\0'; i++,k++)
printf("%s\n", num[k]);

printf("total %d integer(s)\n", i);

system("pause");

return 0;
}
hermitma 2003-08-30
  • 打赏
  • 举报
回复
我给你写了个程序,你自己看看吧。void main()
{
char str[50],*pstr;
int i,j,k,m,e10,digit,ndigit,a[10],*pa;
printf(("输入:\n"));
gets(str);
printf("\n");
pstr=&str[0];
pa=&a[0];
ndigit=0;
i=0;
j=0;
while(*(pstr + i) != '\0')
{
if((*(pstr + i) > '0') && (*(pstr + i) <= '9'))
j++;
else
{
ifj > 0)
{
digit=*(pstr + i - 1) - 48;
k=1;
while(k < j)
{
e10 = 1;
for(m = 1; m <= k; m++)
e10 = e10*10;
digit = digit + (*(pstr + i - 1 - k) - 48)*e10;
k++;
}
*pa =digit;
ndigit++;
pa++;
j = 0;
}
}
i++;

}
if(j > 0)
{
digit = *(pstr +i - 1) - 48;
k = 1;
while(k < j)
{
e10 = 1;
for(m = 1; m <= k; m++)
e10 = e10 * 10;
digit = digit + (*(pstr + i - 1 - k)- 48) * e10;
k++;
}
*pa = digit;
ndigit++;
j = 0;
}
printf("一共有%d\n", ndigit);
j=0;
pa=&a[0];
for(j = 0; j < ndigit; j++)
printf("%d\t" , *(pa + j));
printf("\n");
}
加载更多回复(3)

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧