北大:字符串排序

北大的题可真难啊!!!

我想了一个小时!!!T_T

题目描述

编写一个程序,将输入字符串中的字符按如下规则排序。

规则 1 :英文字母从 A  Z 排列,不区分大小写。

       如,输入: Type   输出: epTy

规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。

     如,输入: BabA   输出: aABb

规则 3 :非英文字母的其它字符保持原来的位置。

     如,输入: By?e   输出: Be?y

样例:

    输入:

   A Famous Saying: Much Ado About Nothing(2012/8).

    输出:

   A  aaAAbc   dFgghh  iimM   nNn   oooos  Sttuuuy  (2012/8).

示例1

输入

A Famous Saying: Much Ado About Nothing (2012/8).

输出

A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).

#include <bits/stdc++.h>
#include <cstdio>
#include <stdio.h>
using namespace std;

struct st//结构体数组,包括内容和下标
{
    char ch;
    int loc;
}y[100],qt[100];//y结构体数组表示字符,qt表示其他

bool cmp(struct st a,struct st b)//比较函数
{
    /*先将参数统一,不分大小写*/
    if(a.ch>='A'&&a.ch<='Z')
        a.ch-='A';
    if(a.ch>='a'&&a.ch<='z')
        a.ch-='a';
    if(b.ch>='A'&&b.ch<='Z')
        b.ch-='A';
    if(b.ch>='a'&&b.ch<='z')
        b.ch-='a';
    //如果不等就升序
    if(a.ch!=b.ch)
        return bool(a.ch<b.ch);
    //否则按输入顺序升序
    return bool(a.loc<b.loc);
}

int main()
{
    int i,j,k,index,last_index;//i是循环变量,j和k分别是两个结构体数组的移动下标,index是每次插入的非字母的下标,last_index表示每次插完后最后一个字符的下标
    char s[100];
    while(gets(s)!=NULL)
    {
        j=k=0;
        for(i=0;s[i]!='\0';i++)//从头到尾扫描
            if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')//发现字母,更新y
                {
                    y[j].ch=s[i];
                    y[j++].loc=i;
                }
            else//发现其他,更新qt
            {
                qt[k].ch=s[i];
                qt[k++].loc=i;
            }
        last_index=j-1;//因为刚才j最后++了一下,因此最后一个字符实际是j-1
        sort(y,y+j,cmp);//快排一下
        for(i=0;i<k;i++)//现在对qt进行查找,把每个其他字符插进去,同时移动
        {
            index=qt[i].loc;//先锁定下标
            for(j=last_index;j>=index;j--)//开始大量移动
                y[j+1].ch=y[j].ch;
            y[index].ch=qt[i].ch;//填进去
            last_index++;//同时最后一个字符的下标++(因为多加了一个)
        }
        for(i=0;i<=last_index;i++)//从头到last_index遍历即可
            cout<<y[i].ch;
        cout<<endl;
    }
}

智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的一些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值