| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 758 人关注过本帖
标题:[求助]字符串操作
只看楼主 加入收藏
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
结帖率:100%
收藏
 问题点数:0 回复次数:5 
[求助]字符串操作
/*
题目是这样的:
输入一串字符,如
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);
中没有加最后一位.
但是第一个又是对了,真是郁闷......
谢谢了. */
搜索更多相关主题的帖子: 字符 
2008-03-05 22:27
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#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]]

学习需要安静。。海盗要重新来过。。
2008-03-05 22:57
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 

/* 利用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]]

—>〉Sun〈<—
2008-03-06 00:05
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
谢谢两位.真是
for(k=0;j>=0;j--,k++)
a[m]+=(temp[j]-48)*pow(10,k);
出了问题,当完成循环的时候,j==-1了.所以.后面的数会少一位.
在第一次循环下再把j=0;
还有点奇怪的时,怎么有的数会少1呢.是有的.并不是全部.
下面是测试数据:

新建 bmp 图像.jpg (28.61 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
2008-03-06 14:59
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
顺着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]]
2008-03-16 17:11
meteor57
Rank: 1
来 自:银河系
等 级:新手上路
帖 子:267
专家分:0
注 册:2007-9-29
收藏
得分:0 
想抓狂......
原来是编译器搞的.
DEV C++4.9.9.2就会出上面的问题(有些数少1)
WIN TC1.9.1和VC++ 6.0就不会.
谁可以帮解释一下这种现象...
谢谢~~~
2008-03-16 21:19
快速回复:[求助]字符串操作
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039996 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved