54. 替换数字(第八期模拟笔试)

题源:卡码网 54. 替换数字

包含的头文件和命名空间

#include <iostream>
#include <cctype>
using namespace std;
  • #include <iostream>:包含这个头文件是为了使用标准输入输出流对象,例如 cincout
  • #include <cctype>:这个头文件提供了一系列用于字符分类的函数,其中包括 isdigit 函数,用于检查给定的字符是否是数字。
  • using namespace std;:这一行允许我们在不需要std::前缀的情况下直接使用标准库中的名字(如 cin, cout, string 等)。

主函数

int main() {
    string s;
    cin >> s;
    string res;
    for (char c : s) {
        if (isdigit(c)) res += "number";
        else res += c;
    }
    cout << res;
    return 0;
}
  • string s;:声明一个 string 类型的变量 s,用于存储输入的字符串。
  • cin >> s;:从标准输入读取一行文本,并存储在变量 s 中。注意,这种读取方式会在遇到空格、制表符或换行符时停止,因此它只读取一行中的第一个单词。
  • string res;:声明另一个 string 类型的变量 res,用于构建最终的结果字符串。
  • for (char c : s) { ... }:使用基于范围的 for 循环遍历字符串 s 中的每一个字符。每次循环中,变量 c 将被设置为 s 中的当前字符。
  • if (isdigit(c)) res += "number";:检查当前字符 c 是否为数字。如果是,将字符串 “number” 追加到 res 中。
  • else res += c;:如果当前字符不是数字,将该字符追加到 res 中。
  • cout << res;:将最终构建的字符串 res 输出到标准输出。
  • return 0;:主函数返回 0,表示程序正常结束。
    在分析提供的C++程序的时间复杂度时,我们关注的是代码执行时间随输入大小的增长率。这个程序中主要的操作集中在字符串的遍历和处理上。具体来看:

主要操作分析

  1. 字符串遍历:程序通过一个基于范围的for循环对输入的字符串 s 进行遍历。对于字符串的每一个字符,都执行了一定的操作。

  2. 字符判断:对于字符串中的每个字符,使用 isdigit 函数来判断这个字符是否为数字。isdigit 函数的时间复杂度是常数时间 ( O(1) )。

  3. 字符串连接:根据字符是否为数字,将字符或字符串 “number” 连接到结果字符串 res 上。字符串连接的时间复杂度取决于字符串的实现和当前长度。在最坏的情况下,字符串的连接操作可能需要时间复杂度为 ( O(n) ),其中 ( n ) 是最终字符串的长度。这是因为可能需要重新分配内存来容纳更大的字符串。

  • 时间复杂度
    最坏情况下的时间复杂度是 ( O(n^2) ),其中 ( n ) 是输入字符串的长度。这是因为每次追加操作都可能涉及到对整个结果字符串的复制,随着迭代次数的增加,总的执行时间是字符串长度的平方级别。

  • 空间复杂度
    最坏情况下的空间复杂度是 ( O(n) )。这里的 ( n ) 指的是输入字符串的长度,而结果字符串可能达到 ( 6n ) 的空间占用。然而,空间复杂度通常表示为输入大小的最高次项系数,忽略常数和低阶项,所以我们将空间复杂度表示为 ( O(n) )。

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值