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. 正在进行的,不断发展的

相关推荐
皮卡蛋炒饭.1 小时前
钻石收集者&是7倍数的最长子序列&Zuma
数据结构·算法·排序算法
仰泳的熊猫1 小时前
题目1529:蓝桥杯算法提高VIP-摆花
数据结构·c++·算法·蓝桥杯
陆嵩2 小时前
CG 方法(共轭梯度)的数学推导及其算法
算法·cg·共轭梯度·lanczos·arnoldi·正交化·gram-schmidt
twilight_4692 小时前
机器学习与模式识别——SVM
算法·机器学习·支持向量机
小糯米6012 小时前
C++ 树
数据结构·c++·算法
liliangcsdn2 小时前
IMPALA强化学习算法的学习和解读
学习·算法
再难也得平2 小时前
[LeetCode刷题]283.移动零(通俗易懂的java题解)
java·算法·leetcode
不想看见4042 小时前
House Robber 基本动态规划:一维--力扣101算法题解笔记
笔记·算法·leetcode·代理模式
掘根2 小时前
【C++STL】红黑树(RBTree)
数据结构·c++·算法