冲刺华为、每天学五道 Day1

HJ1 字符串最后一个单词的长度

给两个标准做法:

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

int main() {
    string s;
    int a=0;
    getline(cin, s);
    for(int i=s.size()-1;s[i]!=' '&&i>=0; i--){ //注意这边是从后开始,同时注意判断语句是i在每次运行是需要达到的条件,并且从后开始的遍历,一定要注意令i>0!
        a++;
    }
    cout<<a;
    return 0 ;
}

注:getline与cin输入字符串的区别
getline经常使用在字符串的输入中,在C++zhong1除了getline输入字符串外还可以使用cin进行字符串的输入,两者的区别是用cin进行输入时遇到空格代表字符串的输入结束,而用getline进行字符串的输入时遇到换行符才会结束该字符串的输入。
————————————————
版权声明:本文为CSDN博主「柒笙歌」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_72542983/article/details/128822871

HJ2 计算某字符出现次数

自己写的第一轮的代码

#include <cstdio>
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int main() {
    string s;
    getline(cin, s);
    char x;
    cin>>x;
    unordered_map<char, int> map;
    for(int i=0; i<s.size(); i++){
        auto  x = map.find(s[i]);
        if(x!=map.end()){
            ++map[s[i]];
        }
        else{
            map.insert(pair<char,int>(s[i], 0));
        }
    }
    cout<< map[x]<<endl;
}

复习了map的使用方式,同时对于insrt、find函数重新复习了一下。
但是依然有两点非常明显的错误:

  1. 既在加入的时候 map.insert(pair<char,int>(s[i], 0));此处再加入时,该项就产生过一次,所以一定要记得对应的value值需要加上1。
  2. 并没有区分大小写,而在此处需要对大小写进行统一为小写!!

修改后的代码如下:

#include <cstdio>
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int main() {
    string s;
    getline(cin, s);
    char x;
    cin>>x;
    if(x >='A' && x<='Z')x=x-'A'+'a'; //在这边对于最后要检测的字符进行小写化处理
    unordered_map<char, int> map;

    for(int i=0; i<s.size(); i++){
        char y=s[i];
        if(y>='A' && y<='Z')y=y-'A'+'a'; //在这边对于字符串中的每个字母添加入哈希表时,都进行小写化处理。
        auto  x = map.find(y);
       
        if(x!=map.end()){
            ++map[y]; //增加哈希表value值时可以用这个方法
        }
        else{
            map.insert(pair<char,int>(y, 1)); //别忘了在添加元素的时候就默认为1哦!
        }
    }
    cout<< map[x]<<endl;
}

也可以直接使用用 法: int tolower(int c); 函数来进行小写化。

HJ3 明明的随机数

#include <cstdio>
#include <iostream>
using namespace std;

int main() {
    int num_input;
    cin>>num_input;
    int s[501];
    for(int i=0;i<501;i++){
        s[i]=0;
    }

    for(int i=0;i<num_input;i++){
        int buffer;
        cin>>buffer;
        s[buffer]++;
    }
    for(int i=0;i<501;i++){
        if (s[i]!=0){cout<<i<<endl;} //endl有换行的功效
    }

    return 0;



 }

// 64 位输出请用 printf("%lld")

还有使用哈希表的方法去做

#include<iostream>
#include<set>
using namespace std;
int main() {
    int n;
    while(cin>>n) {    //输入每组数据的个数
        set<int> order;    //使用set容器可以自动实现去重和排序的操作,这里很关键
        for(int i=0;i<n;i++) {
            int num;
            cin>>num;    //输入数字
            order.insert(num);    //插入到容器order中
        }
        set<int>::iterator it;    //set类型迭代器
        for(it=order.begin();it!=order.end();it++){
            cout<<*it<<endl;    //遍历输出
        }
    }
    return 0;
}
#include <cstdio>
#include <iostream>
#include <iterator>
#include <unordered_set>
#include<set>
using namespace std;

int main() {
    int num_input;
    cin>>num_input;
    
    
    set<int> order;
    
    for(int i=0;i<num_input;i++){
        int buffer;
        cin>>buffer;
        order.insert(buffer);
    } 

    set<int>::iterator itr;
    for(itr=order.begin();itr!=order.end();itr++){
        cout<<*itr<<endl;
    }

    return 0;



 }

// 64 位输出请用 printf("%lld")

注意一定要用set而不是unordered_set,因为unordered不会自动排序,不太行。

HJ4 字符串分隔

#include <iostream>
using namespace std;

int main() {
    string s;
    char count=0;
    string result;
    getline(cin,s);
    if(s.size()%8!=0)
    {
        int x =8-s.size()%8;
        s.append(x, '0');
    }
    for(int i =0; i< s.size();i=i+8){
       cout << s.substr(i, 8) << endl;

    }
    return 0;
}
// 64 位输出请用 printf("%lld")

substr(size_type _Off = 0,size_type _Count = npos)
一种构造string的方法
形式 : s.substr(pos, len)
返回值: string,包含s中从pos开始的len个字符的拷贝(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
异常 :若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n
————————————————
版权声明:本文为CSDN博主「哦啦哦啦!」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42240667/article/details/103131329

所以substr函数即是从第i位往后切割8(len)个字符,随后作为输出。

HJ5 进制转换

#include <iostream>
using namespace std;

int main() {
   string s;
   cin >> s;
    int res =0;
    int pos =0;
    for(pos=2;pos<s.size();pos++){
        int temp;
        if (s[pos]>='A'&&s[pos]<='F'){
            temp=10+(s[pos]-'A');
        }
        else {
        temp=s[pos]-'0'; //在字符串运算中,无论是A还或是0、1、2,减去基准位的字符型时必不可少的。
        }
        res=res*16+temp;
    }
    cout<<res<<endl;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值