IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 牛客华为C++笔试题目(一) -> 正文阅读

[C++知识库]牛客华为C++笔试题目(一)

1.字符串最后一个单词

计算并输出字符串最后一个单词的长度

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char str[5001];
    //输入字符串
    gets(str);  // cin不接受空格、tab键的输入

    //计算并输出字符串最后一个单词的长度
    cout << str << endl;
    int len =0;
    for(int i = strlen(str) - 1; str[i] != ' ' && i >= 0; i--)
        len++;

    cout << len << endl;

    return 0;
}

2.计算字符个数

写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出字符串中含有该字符的个数;不区分大小写

#include <iostream>
#include <string.h>
using namespace std;

int main()
{
    char str[100];
    char ch;
    // 输入一个由字母和数字组成的字符串
    cin >> str;
    cin >> ch;
    cout << "str = " << str << '\n' << "ch = " << ch << endl;
    // 输出输入字符串中含有该字符的个数
    int count = 0;
//    int i = 0;
//    while(str[i] != '\0')
//    {
//        if(str[i] == ch || str[i] == ch + 32 || str[i] == ch - 32)
//            count++;
//        i++;
//    }
    for(int i = 0; str[i] != '\0'; i++)
    {
        if(str[i] == ch || str[i] == ch + 32 || str[i] == ch - 32)
                count++;
    }
    cout << count << endl;

    return 0;
}

3.排序与去重

用计算机生成了N个1到1000之间的随机整数(N<=1000),对于其中重复的数字,只保留一个,把其余的相同的数去掉;然后再把这些数从小到大排序,请完成以上问题中的“去重”和“排序”工作
测试样例1: 3个数字, 分别是2,2,1
测试样例2:11个数字,分别是10,20,40,32,67,40,20,89,300,400,15

#include <iostream>

using namespace std;

int main()
{
    int num, n;
    while(cin >> num)
    {
        int a[1001]={0}; //hash表思路,复杂度为o(n)
        while(num--)
        {
            cin >> n;
            a[n] = 1;
        }
        for(int i = 1; i < 1001; i++)
            if(a[i] == 1)
                cout << i << endl;
    }

    return 0;
}

注意:该题采用了哈希表思路,定义的数组必须初始化,否则内存中之前存入数据将会参与运算,否运行将会出错。

4.字符串分割

连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;长度不是8整数倍的字符串请在后面补数字0,空字符串不处理
输入 abc 123456789 输出 abc00000 12345678 900000000

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string str;
    while(getline(cin, str))
    {
        //循环 截取前八个,
        while(str.size() > 8)
        {
            cout << str.substr(0, 8) << endl;
            str = str.substr(8);
        }
        cout << str.append(8 - str.size(), '0') << endl;
    }

    return 0;
}

length()与size()没有区别,都是返回string对象中元素数量,即返回std::distance(begin(),end()) 。length是因为沿用C语言的习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,它是作为STL容器的属性存在的,便于符合STL的接口规则,以便用于STL的算法。

str.substr()函数

  • 形式:str.substr(pos, n)
  • 解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
  • 补充:若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾

str.append()函数

append函数是向string的后面追加字符或字符串。

  • 向string的后面加C-string

    string s = “hello “; const char *c = “out here “;
    s.append?; // 把c类型字符串s连接到当前字符串结尾
    s = “hello out here”;

  • 向string的后面加C-string的一部分

    string s=”hello “;const char *c = “out here “;
    s.append(c,3); // 把c类型字符串s的前n个字符连接到当前字符串结尾
    s = “hello out”;
    3).向string的后面加string
    string s1 = “hello “; string s2 = “wide “; string s3 = “world “;
    s1.append(s2); s1 += s3; //把字符串s连接到当前字符串的结尾
    s1 = “hello wide “; s1 = “hello wide world “;

  • 向string的后面加string的一部分

    string s1 = “hello “, s2 = “wide world “;
    s1.append(s2, 5, 5); 把字符串s2中从5开始的5个字符连接到当前字符串的结尾
    s1 = “hello world”;
    string str1 = “hello “, str2 = “wide world “;
    str1.append(str2.begin()+5, str2.end()); //把s2的迭代器begin()+5和end()之间的部分连接到当前字符串的结尾
    str1 = “hello world”;

  • 向string后面加多个字符

    string s1 = “hello “;
    s1.append(4,’!’); //在当前字符串结尾添加4个字符!
    s1 = “hello !!!”;
    ————————————————
    转载原文链接:https://blog.csdn.net/wxn704414736/article/details/78551886

5.进制转换

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入)
输入0xA ,输出 10

#include <iostream>

using namespace std;

int main()
{
    string str;
    while(getline(cin, str))
    {
        if(str.size() < 0)
            break;
        int num = 0;
        for(int i =2; i < str.size(); i++)
        {
            if(str[i] >= '0' && str[i] <= '9')
                num = num * 16 + str[i] - '0';
            else
                num = num * 16 + str[i] - 'A' + 10;
        }
        cout << num << endl;
    }
    return 0;
}

6.质数因子

输入一个long型正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5),最后一个数后面也要有空格

#include <iostream>

using namespace std;

int main()
{
    long num;
    while(cin >> num)
    {
        //for循环从小到大的质数因子
        for(int i = 2; i * i < num; i++) // 使用i^2 < num 比i <= num时间复杂度低
        {
            while(num % i == 0)
            {
                cout << i << ' ';
                num /= i;
            }
        }
        //数字本身就是质数
        if(num > 1)
            cout << num << ' ';
    }

    return 0;
}

7.取近似值

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值
验证:输入5.5 输出6

#include <iostream>

using namespace std;

int main()
{
    double num; //一般情况下不用float,因为float强转会产生很多问题
    cin >> num;
    int a = (int)num;	//强转
    if((num - a) * 10 >= 5)
        cout << a + 1 << endl;
    else if((num - a) * 10 <= -5)
        cout << a - 1 << endl;
    else
        cout << a << endl;

    return 0;
}

8.合并表记录

数据表记录包含包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出

输入描述:先输入键值对的个数,然后输入成对的index和value值,以空格隔开
输出描述:输出合并后的键值对(多行)
示例:4 0 1;0 2; 1 2;3 4
输出:0 3;1 2;3 4

#include <iostream>
#include <unordered_map>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int num;    //键值对数
    cin >> num;
    unordered_map<int, int> hash;
    vector<int> key_map;
    while(num--)
    {
       int key, value;
       cin >> key >> value;
       key_map.push_back(key);    //有重复的
       hash[key] += value;
    }
    //去重
    sort(key_map.begin(), key_map.end());
    key_map.erase(unique(key_map.begin(), key_map.end()), key_map.end());

    //遍历打印
    for(vector<int>::iterator iter = key_map.begin(); iter != key_map.end(); ++iter)
        cout << *iter << " " << hash[*iter] << endl;
    
    return 0;
}

unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)。因此,其元素的排列顺序是无序的。

unorder_map库详细介绍
vector库详细介绍
sort函数详细介绍
unique函数详细介绍

9.提取不重复的整数

输入一个intx型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
验证:输入 9876673 输出37689

/** 9.提取不重复的整数 */
#include <iostream>
#include <unordered_map>

using namespace std;

int main()
{
    unordered_map<int, int> hash;
    int num;
    int out = 0;
    cin >> num;

    while(num)
    {
        if(hash[num % 10] == 0)
        {
            hash[num % 10]++;
            out = out * 10 + num % 10;
        }
        num /= 10;
    }
    cout << out << endl;

    return 0;
}

10.字符个数统计

编写一个函数,计算字符串中含有的不同字符的个数。字符在ASCII码范围内(0~127),换行表示结束符,不在范围内的不作统计
验证:输入 abc 输出 3

采用数组方法

#include <iostream>

using namespace std;

int main()
{
    char ch[500];
    int arr[128] = {0};
    int count = 0;
    gets(ch);
    for(int i = 0; ch[i] != '\0'; i++)
    {
        arr[ch[i]]++;
    }
    for(int k = 0; k < 128; k++)
    {
        if(arr[k] > 0)
            count++;
    }
    cout << count << endl;

    return 0;
}

采用hash表

#include <iostream>
#include <unordered_map>

using namespace std;

int main()
{
    int sum = 0;
    unordered_map<char, int> hash;
    char ch[500];
    cin >> ch;
    for(int i = 0; ch[i] != '\0'; i++)
    {
        if(ch[i] >= 0 && ch[i] <= 127)
            hash[ch[i]] = 1;
    }

    for(int k = 0; k < hash.size(); k++)
    {
        if(hash[k] == 1)
            sum++;
    }
    cout << sum <<endl;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-04 11:00:48  更:2021-08-04 11:02:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 14:39:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码