[求助]字符串操作
/*题目是这样的:
输入一串字符,如
dgt125 ?458 .20
要把连续的字符组成一个整数,依次放到数组a中,如把125放到a[0],458放到a[1],20放到a[2]
输出数组元素:125 458 20
整数的个数:3
*/
#include"stdio.h"
#define N 64
int main(void)
{
int i,j,k,flag=0,m=0,count=0;
int a[N];
char str[N],temp[N];
printf("请输入一个字符串:");
gets(str);
for(i=0,j=0;str[i]!='\0';i++)
{
temp[0]='\0'; //把temp置为空串
while(str[i]<='9'&&str[i]>='0') //如果是数字字符进入
{
temp[j]=str[i];
flag=1;
if(str[i+1]>'9'||str[i+1]<'0')
{
temp[j+1]='\0';
break;
}
i++;
j++;
}
if(flag==1)//如果 flag==1表示已经temp[]中有整数,开始转换
{ a[m]=0;
for(k=0;j>=0;j--,k++)
a[m]+=(temp[j]-48)*pow(10,k);
m++;
count++;
flag=0;
}
}
printf("连续的整数为:");
for(i=0;i<=count-1;i++)
printf("%d ",a[i]);
printf("\n其中连续整数的个数是:%d\n",count);
system("pause");
return 0;
}
/*1.a[0]有时可以正确显示,有时会比输入少1(如123),以后的就不行了,都是只有后两位,如果是一位的,就是0
怎么回事啊,啊里出了问题?觉得应该是
for(k=0;j>=0;j--,k++)
a[m]+=(temp[j]-48)*pow(10,k);
中没有加最后一位.
但是第一个又是对了,真是郁闷......
谢谢了. */
搜索更多相关的解决方案:
字符
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"math.h"
#define N 64
int main(void)
{
int i,j,k,flag=0,m=0,count=0;
int a[N];
char str[N],temp[N];
printf("请输入一个字符串:");
gets(str);
for(i=0;str[i]!='\0';i++)
{
j=0;
while(str[i]<='9'&&str[i]>='0') //如果是数字字符进入
{
temp[j]=str[i];
flag=1;
if(str[i+1]>'9'||str[i+1]<'0')
{
temp[j+1]='\0';
break;
}
i++;
j++;
}
if(flag==1)//如果 flag==1表示已经temp[]中有整数,开始转换
{ a[m]=0;
for(k=0;j>=0;j--,k++)
a[m]+=(temp[j]-48)*pow(10,k);
printf("%d \n",a[m]);
m++;
count++;
flag=0;
}
}
printf("连续的整数为:");
for(i=0;i<=count-1;i++)
printf("%d ",a[i]);
printf("\n其中连续整数的个数是:%d\n",count);
getchar();
return 0;
}
[[it] 本帖最后由 sunkaidong 于 2008-3-5 23:37 编辑 [/it]]
----------------解决方案--------------------------------------------------------
/* 利用scanf() 的返回值 */
#include <stdio.h>
#include <stdlib.h>
#define MAX 64
[bo]int[/bo] main([bo]void[/bo])
{
#if MAX == 0
printf("\a#define MAX 0\nError!\n");
#else
[bo]int[/bo] ar[MAX] = {0};
[bo]int[/bo] i = 0;
[bo]while[/bo] (i < MAX)
{
[bo]if[/bo] (scanf("%d", &ar[i] ) == 1)
i++;
[bo]else[/bo]
getchar();
}
[bo]for[/bo] (i = 0; i < MAX; i++)
{
printf("%d ", ar[i]);
[bo]if[/bo] (i % 8 == 7)
putchar('\n');
}
putchar('\n');
#endif
system("Pause");
[bo]return[/bo] 0;
}
[[it] 本帖最后由 cosdos 于 2008-3-6 00:09 编辑 [/it]]
----------------解决方案--------------------------------------------------------
谢谢两位.真是
for(k=0;j>=0;j--,k++)
a[m]+=(temp[j]-48)*pow(10,k);
出了问题,当完成循环的时候,j==-1了.所以.后面的数会少一位.
在第一次循环下再把j=0;
还有点奇怪的时,怎么有的数会少1呢.是有的.并不是全部.
下面是测试数据:
----------------解决方案--------------------------------------------------------
顺着3#的思路.好像也不行哦.
主要是停不下来.就是a中要有MAX个元素才会停会有结果.
不知道该怎么控制.
while (i<MAX)
{
if (scanf("%d",&a[i])==1)i++;
else if (getchar()=='\n')break;
}
这样也不行.运行后,输入一串字符.比如123asd加回车
123可以到a[0];asd也可到三个getchar();但回车却到了scanf();了.这当然无法结束.
如果是数字结尾的,比如asd123加回车.asd可以到三个getchar();123可以到a[0];回车还是在scanf();......
还有,自己的那段也不行.就像楼上说的那样.
想了几天也不明白.真笨...
请求高人指点.谢谢了!
[[it] 本帖最后由 meteor57 于 2008-3-16 17:14 编辑 [/it]]
----------------解决方案--------------------------------------------------------
想抓狂......
原来是编译器搞的.
DEV C++4.9.9.2就会出上面的问题(有些数少1)
WIN TC1.9.1和VC++ 6.0就不会.
谁可以帮解释一下这种现象...
谢谢~~~
----------------解决方案--------------------------------------------------------