杭电1106题字符串的拆解、排序

杭电1106题字符串的拆解、排序

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1106
之前是用模拟直接做的,结果不断WA不断找坑改进代码,还是AC不了,没办法就看大神的博客,发现字符数组拆解加字符串转换成数字,这操作太骚了!!!自己也基本没接触过两个字符串函数
用了两个函数:strtok和atoi
strtok函数:将字符数组按特定字符拆解

原型:char *strtok(char s[], const char *delim);
分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。

atoi函数:将字符数组转换成数字

把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。 int atoi(const char *nptr) 函数会扫描参数
nptr字符串,跳过前面的空白字符(例如空格,tab缩进)等,可以通过isspace(
)函数来检测),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束符(‘\0’)才结束转换,并将结果返回。如果
nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0。

AC代码如下:

#include<bits/stdc++.h>
using namespace std;
/*杭电1106题,将字符串拆解并转换成数字排序*/
int main()
{
	char s[1200],*p;
	int a[1200],index;
	while(cin>>s)
	{
		index=0;
		p=strtok(s,"5");  //指定拆分字符 
		while(p!=NULL)  //去掉前导5 
		{
			a[index]=atoi(p);  //转换成数字,存入数组 
			index++;
			p=strtok(NULL,"5");
		}
		sort(a,a+index);
		for(int i=0;i<index;i++)
		{
			if(i==0)
			   cout<<a[i];
			else cout<<" "<<a[i];
		}
		cout<<endl;
	}
	return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
华为od字符串重新排序是指将一个字符串中的数字和字母按照一定规则重新排列,使其符合特定的格式。华为od字符串排列方式是将字符串中的数字从小到大排序,字母按照其 ASCII 码从小到大排序,最后将数字和字母交替排序。例如,给定字符串"3A2C4G1B",按照华为od字符串排列方式重新排序后输出为"1B2C3G4A"。 对于实现华为od字符串重新排序,可以采用多种方法。其中一种方法是利用排序算法对数字和字母分别进行排序,再进行交替排序。对于数字的排序可以使用快速排序、归并排序、堆排序等常见的排序算法。对于字母的排序,可以使用常见的排序算法,如冒泡排序、选择排序、插入排序等。 具体实现时,需要定义一个交替排序的函数,实现数字和字母的交替排序。首先需要分别将数字和字母排序,然后将其按照顺序交替存放到新的字符串中。需要注意的是,当数字和字母的数量不相等时,需要将数量少的一方先存放到新的字符串中,再将剩下的元素交替存放到新的字符串中。同时,需要注意字符串中可能存在重复的数字和字母,需要避免对这些元素进行多次交替排序。 对于华为od字符串重新排序的实现,除了使用排序算法外,还可以采用桶排序等其他算法来实现。无论采用什么样的算法,都需要注意对程序进行充分测试和优化,确保其正确性和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江西师范大学-20届-吴悠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值