首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么提取一大串字符中的每个数字?数字以空格隔开

2014-01-01 
如何提取一大串字符中的每个数字?数字以空格隔开。#includestdio.h#define N 10000int main(void){char c

如何提取一大串字符中的每个数字?数字以空格隔开。

#include<stdio.h>
#define N 10000
int main(void)
{
    char c,str[N];
    int i=0;
    int t=0;
    int flag=0,stop=1,num=0;
    char te[N][N];
    
    //输入字符串
    do
    {
        scanf("%c",&c);
        str[i++]=c;
    }while(c!='\n');

    //处理字符串
    while(str[t]!='\n')
    {
        if(str[t]!=' ')
        {
            te[flag][num]=str[t];
            num++;
            stop=0;
        }
        else if(str[t]==' '&&stop==0)
        {
            flag++;
            num=0;
            stop=1;
        }
        t++;
    }
    
    //输出
    for(i=0;te[i]!='\0';i++)
        printf("%s\t",te[i]);
        
    return 0;
}


例如:

输入:1 20 2 20 3 20 4

则输出:1    20    2    20    3    20    4
[解决办法]
字符串用sscanf,你可以试试"%d%n"格式,%n可获取读到字符数量,这样方便组织简洁的代码...
[解决办法]
#include<stdio.h>
#define N 10000//这里的10000会不会太大了,我的gcc编译器告诉我 no stack ,内存被耗尽。
int main(void)
{
    char c,str[N];
    int i=0;
    int t=0;
    int flag=0,stop=1,num=0;
    char te[N][N];
     
    //输入字符串
    do
    {
        scanf("%c",&c);
        str[i++]=c;
    }while(c!='\n');
 
    //处理字符串
    while(str[t]!='\n')//我想知道你期望的'\n'在哪里。难道没有输出乱码吗?
    {
        if(str[t]!=' ')
        {
            te[flag][num]=str[t];
            num++;
            stop=0;
        }
        else if(str[t]==' '&&stop==0)
        {
            flag++;
            num=0;
            stop=1;
        }
        t++;
    }
     
    //输出
    for(i=0;te[i]!='\0';i++)
        printf("%s\t",te[i]);
         
    return 0;
}
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

 int main()
 {
         char s[] = "1 10 2 20 3 30 4";
         const char *d = " \t";


         char *p;
 int num;
         p = strtok(s,d);
         while(p)
         {
num = atoi(p);                // p就是分割出来的数字的字符串形式,转成整型后就是num
printf("%s : %d\n", p, num);
p=strtok(NULL,d);
         }
         return 0;
 }


[解决办法]
#include <stdio.h>
char s[]="123 ab 4";
char *p;
int v,n,k;
void main() {
    p=s;
    while (1) {
        k=sscanf(p,"%d%n",&v,&n);
        printf("k,v,n=%d,%d,%d\n",k,v,n);
        if (1==k) {
            p+=n;
        } else if (0==k) {
            printf("skip char[%c]\n",p[0]);
            p++;
        } else {//EOF==k
            break;
        }
    }
    printf("End.\n");
}
//k,v,n=1,123,3
//k,v,n=0,123,3
//skip char[ ]
//k,v,n=0,123,3
//skip char[a]
//k,v,n=0,123,3
//skip char[b]
//k,v,n=1,4,2
//k,v,n=-1,4,2
//End.

热点排行