首页 > 编程语言 >C/C++ 删除字符串中重复的字符并排序算法详解及源码

C/C++ 删除字符串中重复的字符并排序算法详解及源码

时间:2024-12-01 21:28:36浏览次数:8  
标签:字符 string temp ++ C++ int 源码 详解 size

删除重复字符算法详解及代码

思路

  1. 创建一个数组,默认所有元素都是0;
  2. 遍历字符串的每个字符;
  3. 判断当前字符是否已经出现过,如果没有出现过,则将数组中对应位置设为0,如果当前字符已经出现过,则将数组中对应位置设为1;
  4. 遍历数组把值为0对应位置的字符加入到结果字符串中;
  5. 返回结果字符串。

代码

string removeRepeat(string s)
{
    vector<int> a(100,0);
    string result;
    int i, j;
    for (i = 0; i < s.size()-1; ++i)
    {
        for (j = i + 1; j < s.size(); ++j)
        {
            if (s[i] == s[j])
                a[j] = 1;
        }
    }
    for (i =0; i<s.size(); ++i)
    {
        if (a[i] == 0)
            result += s[i];
    }
    return result;
}

排序字符串算法详解及代码

思路

使用了冒泡排序,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数组的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。

代码

void sortString(string& s)
{
    int i, j;
    for (i = 0; i < s.size()-1; ++i)
    {
        for (j = 0; j < s.size()-i-1; ++j)
        {
            if (s[j] > s[j+1])
            {
                char temp = s[j];
                s[j] = s[j+ 1];
                s[j + 1] = temp;
            }
        }
    }
}

整体代码

#include <iostream>
#include <string>
#include <vector>
using namespace std;
string removeRepeat(string s)
{
    vector<int> a(100,0);
    string result;
    int i, j;
    for (i = 0; i < s.size()-1; ++i)
    {
        for (j = i + 1; j < s.size(); ++j)
        {
            if (s[i] == s[j])
                a[j] = 1;
        }
    }
    for (i =0; i<s.size(); ++i)
    {
        if (a[i] == 0)
            result += s[i];
    }
    return result;
}
void sortString(string& s)
{
    int i, j;
    for (i = 0; i < s.size()-1; ++i)
    {
        for (j = 0; j < s.size()-i-1; ++j)
        {
            if (s[j] > s[j+1])
            {
                char temp = s[j];
                s[j] = s[j+ 1];
                s[j + 1] = temp;
            }
        }
    }
}
int main() 
{
    string s;
    cin >> s;
    string result = removeRepeat(s);
    cout <<"result:" << result << endl;
    sortString(result);
    cout << "result:" << result << endl;
    return 0;
}

运行效果

总结

文笔不好请见谅,要是有问题欢迎在评论区留言或者私信我,也欢迎指出我的不足,感谢观看。

标签:字符,string,temp,++,C++,int,源码,详解,size
From: https://blog.csdn.net/2302_82012065/article/details/144174660

相关文章

  • HickWall 详解
    优质博文:IT-BLOG-CN一、监控分类【1】Tracing调用链:【2】Logging日志:【3】Metrics指标:在应用发布之后,会长时间存在的度量维度。某个接口的请求量、响应时间。Metrics数据模型二、Metirc接入【1】pom.xml中添加metric-client依赖<dependency><groupId>com.ctri......
  • C++ 学习笔记(3):引用和指针
    前言前几天问GPT问的,单独拎出来当作笔记的一个补充吧。指针的基本概念指针(Pointer)是一个变量,它存储的是另一个变量的内存地址。在C++中,定义一个指针变量时使用*符号,这个符号并不是表示解引用,而是表示这个变量是一个指针变量,指向某种类型的数据。例子inta=5;int*p......
  • 文件上传漏洞&靶场通关详解
    文件上传漏洞&靶场通关详解什么是文件上传漏洞?大部分网站都拥有上传文件的部分,文件上传漏洞是由于网站开发者对用户上传文件的过滤不够严格,攻击者可以通过这些漏洞上传可执行文件(如木马,恶意脚本和WebShell等等),从而达到随意控制网站的目的。文件上传漏洞有哪些危害?攻击......
  • AES加密算法原理详解
    AES加密:高级加密标准(AES,AdvancedEncryptionStandard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:明文p::::info没有经过加密的数据。:::密钥K::::info用来加密明文的密码,在......
  • 使用WebAssembly结合Rust实现高性能Web应用的技术详解
    ......
  • [2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(6))
    参考程序:#include<bits/stdc++.h>usingnamespacestd;intn;inta[305];intdp[305][305];//打掉ij之间所有靶子可以获得的最大积分(不含i,j)intmain(){cin>>n;for(inti=1;i<=n;i++){cin>>a[i];}a[0]=1;a[n+1]=1;for(inti=n......
  • EntitasLite源码分析(五)
    IComponent在ECS结构中,Component并不实际承载逻辑,而是负责为逻辑提供所需的数据,因此Component只是一个负责记录数据的容器。EntitasLite框架中,几乎所有类型都维持着一个接口类对应一个接口实现类的形式,如IContext和Context、IEntity和Entity。Component则不同,Compone......
  • EntitasLite源码分析(六)
    IMatcherMatcher是EntitasLite提供的一个匹配器,也可以叫筛选器,通过定义一系列Component规则来对Entity进行匹配或筛选。基本结构由IMatcher接口类定义:这一堆的IMatcher接口乍一看有点乱,仔细一看,还真是有点乱。没关系,我们继续看实现类Matcher。MatcherMatcher是IMatche......
  • 详解虚数 i^i | 图解虚数 i
    注:本文为“虚数iii”相关文章合辑。机翻,未校。itothepoweri2023-08-0800:00:00Theimaginaryunit......
  • 【0x0001】HCI_Set_Event_Mask详解
    目录一、命令概述二、命令格式三、命令参数说明四、返回参数说明五、命令执行流程5.1.主机准备阶段5.2.命令发送阶段5.3.控制器接收与处理阶段5.4.事件过滤与反馈阶段5.5.主机处理(主机端)5.6.示例代码六、命令应用场景6.1.功耗优化场景6.2.性能优化场景6......