[字符串]HDU1106 字符串相关练习

来源:互联网 发布:js写贪吃蛇 编辑:程序博客网 时间:2024/04/30 01:05

题目:HDU 1106

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1106

解题:最近看了很多关于string的函数,拿这题试下手。

心得:

  1. 编译器要选C++啊 魂淡!

代码:

version1:

15MS336K923 B(一无是处。。╮(╯▽╰)╭)

#include<iostream>#include<algorithm>#include<string>#include<cstring>using namespace std;bool cmp(string a, string b){int la = a.length(), lb = b.length();if(la!=lb)return la<lb;elsereturn a<b;}void zero(string &str)//这里纠结了很久,字符串删去一个节点后长度相应减小,所以i是不能动的。{int i = 0, l = str.length();while(str.length()!=1&&str[i]=='0')str.erase(0,1);}int main(){freopen("in.txt","r",stdin);string str, num[1050];int start, end, cnt, i, l;while (getline(cin,str)){cnt = 0;l = str.length();start = str.find_first_not_of("5",0);while ((end = str.find("5", start))!=-1&&end<l){num[cnt++] = str.substr(start,end-start);start = str.find_first_not_of("5",end);}if(start!=-1&&start<l)num[cnt++] = str.substr(start,l-start);for(i=0;i<cnt;i++)zero(num[i]);sort(num,num+cnt,cmp);for(i=0;i<cnt;i++){cout<<num[i];if(i==cnt-1)cout<<endl;elsecout<<" ";}}}

version2:

0MS320K397 B(现阶段的最优版本)

#include <iostream>#include <cstring>#include<algorithm>using namespace std;int main(){int cnt, num[1005], i;char s[1005];while(gets(s)){cnt = 0;char *p=strtok(s,"5");//失散多年的字符串切割函数while(p!=NULL){num[cnt++] = atoi(p);p=strtok(NULL,"5");}sort(num,num+cnt);cout<<num[0];for(i=1;i<cnt;i++)cout<<" "<<num[i];cout<<endl;}return 0;}


version3:

0MS324K584 B