2月20日(88-90题)

88.字符串排序

题目描述

输入一行字符串,全部由小写字母构成,对字符串按26个英文字母的先后顺序进行排序,然后输出。

代码

cpp 复制代码
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {

    string s;
    while (cin >> s) {
        // 使用标准库函数对字符串中的字符进行排序
        sort(s.begin(), s.end());
        
        // 输出排序后的字符串并换行
        cout << s << "\n";
    }

    return 0;
}

总结

stl中的sort函数可以排序字符串。


89.回文问题

输入一串字符,其长度小于200,判断该串字符是否构成回文。 所谓回文是指从左到右和从右到左读一串字符的值是一样的,如:ABCBA。

代码

cpp 复制代码
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main() {

    string s;
    while (cin >> s) {
        // 复制一份原字符串
        string rev_s = s;
        
        // 使用标准库函数将复制的字符串翻转
        reverse(rev_s.begin(), rev_s.end());
        
        // 比较原字符串和翻转后的字符串
        if (s == rev_s) {
            cout << "Yes\n";
        } else {
            cout << "No\n";
        }
    }

    return 0;
}

总结

​ 可以借助 <algorithm> 库里的 reverse 函数,将字符串翻转,然后直接与原字符串进行比较。


90.字符串中找整数

题目描述

对于一个字符串,编程找出其中的所有整数。例如,字符串"a12bc34d05",其中有整数12、34、5。

代码

cpp 复制代码
#include <iostream>
#include <string>
#include <vector>
#include <cctype> 

using namespace std;

int main() {

   string s;
   while (cin >> s) {
       vector<string> nums; // 用于存放提取出来的所有数字
       string current_num = ""; // 临时存放当前正在提取的数字
       
       for (char c : s) {
           // 如果当前字符是数字
           if (isdigit(c)) {
               current_num += c;
           } else {
               // 如果当前字符不是数字,且 current_num 不为空,说明一个数字刚刚结束
               if (!current_num.empty()) {
                   // 去除前导零
                   int i = 0;
                   // 保留最后一位,防止把单个 "0" 也删没了
                   while (i < current_num.length() - 1 && current_num[i] == '0') {
                       i++;
                   }
                   nums.push_back(current_num.substr(i));
                   current_num = "";
               }
           }
       }
       
       // 处理字符串以数字结尾的情况(循环结束后 current_num 中可能还有数据)
       if (!current_num.empty()) {
           int i = 0;
           while (i < current_num.length() - 1 && current_num[i] == '0') {
               i++;
           }
           nums.push_back(current_num.substr(i));
       }

       cout << nums.size();
       for (int i = 0; i < nums.size(); ++i) {
           cout << " " << nums[i];
       }
       cout << "\n";
   }

   return 0;
}

总结

isdigit(c) :这是 <cctype> 库里的一个非常实用的函数,用来判断一个字符是否是数字。去除前导 0 的逻辑 :当提取到像 034 这样的字符串时,使用 while 循环跳过前面的 0,但条件里加了 i < current_num.length() - 1,这是为了确保如果数字本身就是 0000 时,至少能保留最后一个 0 不被删掉。如果整个字符串就是以数字结尾的(比如 abc123),for 循环结束时 current_num 里会残留 123,所以循环外还需要再做一次相同的判断和入队操作。


翻译

​ 那么,回到现代计算机的开关能力上来:20世纪70年代的计算机通常一次能够处理八个开关。也就是说,它们在每个周期可以处理八个二进制数字,或者说数据的"位"(bits)。一组八个位被称为一个"字节"(byte),每个字节包含256种可能的"开"和"关"(或1和0)的模式。每种模式等同于一条指令、指令的一部分,或者是特定类型的数据项,比如数字、字符或图形符号。例如,模式11010010可能是二进制数据------在这种情况下,即十进制数字210------或者它可能是一条指令,告诉计算机将存储在其开关中的数据与存储在特定内存芯片位置的数据进行比较。

​ 能够一次处理16位、32位和64位数据的处理器的发展,提高了计算机的运行速度。一台计算机能够识别的完整模式集合------即它能执行的全部操作列表------被称为它的指令集。这两个因素------一次能够处理的位数,以及指令集的大小------随着现代数字计算机的不断发展而持续增加。

equivalent: n. 等价物;adj. 相等的,等同的

ongoing: adj. 正在进行的,不断发展的

相关推荐
CappuccinoRose1 分钟前
排序算法和查找算法 - 软考备战(十五)
数据结构·python·算法·排序算法·查找算法
旖-旎3 分钟前
分治(交易逆序对的总数)(6)
c++·算法·leetcode·排序算法·归并排序
北顾笙9804 分钟前
day14-数据结构力扣
数据结构·算法·leetcode
Ln5x9qZC212 分钟前
尾递归与Continuation
算法
一路向北he12 分钟前
esp32库依赖
c语言·c++·算法
老四啊laosi13 分钟前
[双指针] 6. 查找总价为目标值的两个商品
算法·力扣·总价为目标值得两商品
人间寥寥情难诉29 分钟前
LRU算法本地实现
java·算法·spring
moonsea020331 分钟前
2026.4.2
开发语言·c++·算法
cpp_250138 分钟前
P10376 [GESP202403 六级] 游戏
c++·算法·动态规划·题解·洛谷·gesp六级
智者知已应修善业40 分钟前
【51单片机4个IO实现16按键可扩展独立按键64矩阵驱动显示矩阵原值】2023-5-8
c++·经验分享·笔记·算法·51单片机