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,这是为了确保如果数字本身就是 0 或 000 时,至少能保留最后一个 0 不被删掉。如果整个字符串就是以数字结尾的(比如 abc123),for 循环结束时 current_num 里会残留 123,所以循环外还需要再做一次相同的判断和入队操作。


翻译

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

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

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

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

相关推荐
UIU1149 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场10 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi10 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David11 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法
碧海银沙音频科技研究院11 小时前
在PC电脑上用Whisper→Marian算法实现离线语音翻译功能
算法·whisper
niyongsheng12 小时前
3D 装箱算法工程化:数据结构、放置启发式与支撑规则
数据结构·算法·rust
j7~14 小时前
【穷举、深搜与回溯算法】一棵决策树讲透全排列与子集
数据结构·c++·算法·leetcode·回溯·递归
傅科摆 _ py15 小时前
DP,贪心,堆和栈,二分力扣复习
开发语言·python·算法
Shaoshing16 小时前
LeetCode100 42.接雨水
java·算法·leetcode
域限奇点访客16 小时前
用AI生成问卷的网站怎么选?看题目录入结构、题型映射和生成后的校验
算法