hdu 1106 字符串处理

这题主要用到字符串的分割,和字符型转换成整型,这其实可以用两个函数来代替。

atoi这个函数原来做进制转换的时候就接触过。如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 ) 字符时停止转换,返回整型数。

strtok函数,感觉这个比较新鲜。下面从百度百科摘点介绍:

原型

  char *strtok(char *s, const char *delim);

功能

  分解字符串为一组字符串。s为要分解的字符串,delim为分隔符字符串。

说明

  strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串,当strtok()在参数s的字符串中发现到参数delim的分割字符时则会将该字符改为 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回被分割出片段的指针。

返回值

  从s开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。

  所有delim中包含的字符都会被滤掉,并将被滤掉的地方设为一处分割的节点。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void*a,const void*b)
{
    return *(int*)a-*(int*)b;
}
int main()
{
    int n,i,cnt;
    int b[1100];
    char a[1100],*p;
    while(~scanf("%s",a))
    {
        cnt=0;
        p=strtok(a,"5");
        while(p!=NULL)
        {
            b[cnt++]=atoi(p);
            p=strtok(NULL,"5");
        }
        qsort(b,cnt,4,cmp);
        printf("%d",b[0]);
        for(i=1;i<cnt;i++)
            printf(" %d",b[i]);
        putchar('
');
    }
    return 0;
}

或者是自己写。

出现奇怪现象,用codeblock写的程序,一直ws,后来加入了三个头文件

#include<cstring>
#include<cstdio>
#include<cmath>
提交后ac了。但是加这几个头文件在codeblock是有问题的,不理解?
#include<iostream>
#include<stdio.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<stack>
#include<queue>
#include<map>
#include<cstring>
#include<cstdio>
#include<cmath>
#define N 10010
using namespace std;
char str[N];
int num[N];

//将字符串转换成整型
int change(string str)
{
    int len=str.length();
    int i,j;
    int sum=0;
    for( i=len-1,j=0;i>=0;i--,j++)
    {
        sum+=(int)(str[i]-'0')*pow(10.0,j);
    }
    return sum;

}
int main()
{
    string temp;
    while(scanf("%s",str)!=EOF)
    {
        int i;
        int kk=0;
        int len=strlen(str);
        temp="";
        for(i=0;i<len;i++)
        {
            if(str[i]=='5')
            {

                if(str[i-1]!='5'&&i!=0) //是5但是连续的5或者第一个数就是5,都不处理
                {
                    num[kk++]=change(temp);
                    temp="";
                }
            }
            else
            {
                temp+=str[i];
                if(i==len-1)  //处理最后一个数
                {
                    num[kk++]=change(temp);
                }
            }
        }
        sort(num,num+kk);

        for(int i=0;i<kk-1;i++)
        {
            printf("%d ",num[i]);
        }
        cout<<num[kk-1]<<endl;
    }
    return 0 ;
}
原文地址:https://www.cnblogs.com/zn505119020/p/3564797.html