简单记录一下牛客华为刷题C++,以下为个人刷题思路,仅供参考,代码亲测可通过。
目录
1.字符串最后一个单词的长度
一段英文字符串中最后一个单词的长度。
因为输入的字符串由空格,因此使用getline
str.size()函数可以读取字符串的实际长度,包括空格。
#include <iostream>
#include <string>
using namespace std;
int main() {
string str;
int getNum = 0;
getline(cin, str);
int i = str.size()-1;
while(str[i] != ' ' && i >= 0)
{
getNum++;
i--;
}
cout << getNum;
}
2.计算某字符出现次数
tolower()函数,将大写转换成小写,数字不变。
#include <iostream>
using namespace std;
int main() {
string str;
char target;
int num = 0;
getline(cin,str);
cin >> target;
for( int i = 0; i < str.size(); i++)
{
if(tolower(str[i]) == tolower(target))
{
num++;
}
}
cout<<num<<endl;
}
3.明明的随机数
set容器,用二叉树实现,有以下两个特点:
1. set中的元素不允许重复;
2. set内部会维护一个严格的弱排序关系。
#include <iostream>
#include<set>
using namespace std;
int main() {
set<int>s;
int num = 0;
int inputNum;
cin >> num;
for (int i = 0; i < num; i++)
{
cin >> inputNum;
s.insert(inputNum);
}
set<int>::iterator it;
for (it = s.begin(); it != s.end(); it++)
{
cout << *it<<endl;
}
}
4.字符串分割
思路:现将字符串补齐位8的倍数再分隔;
append()函数 在字符串后面添加‘0’
substr()函数 获得字符串中从0 到第8位输出,八个为一循环
#include <iostream>
using namespace std;
int main() {
string str;
cin >> str;
while (str.size() % 8 != 0)
{
int count = 8 - str.size() % 8;
str.append(count, '0');
}
for (int i = 0; i < str.size(); i += 8)
{
cout << str.substr(i, 8) << endl;
}
}
5、进制转换
cin 和cout默认情况下是按照十进制输出的
八进制:oct
十六进制:hex
十进制:dec
#include <iostream>
using namespace std;
int main() {
int a;
cin >>hex>> a;
cout <<dec<< a;
}
纠正:按照题目要求,应该是输入一个字符串,不同组的测试用例用\n隔开。
stoi(const std::string& str, std::size_t* pos = 0, int base = 10);
功能:将字符串 str 转成 int 整数
参数:
str:字符串
pos:存储将字符串 str 转成 int 整数,处理了 str 中字符的个数的地址,默认为 NULL,如果是3,就只转换前三个数
base:进制,10:十进制,8:八进制,16:十六进制,0:则自动检测数值进制,str 是 0 开头为八进制,str 是 0x 或 0X 开头是十六进制,默认为十进制
#include <iostream>
#include<string>
using namespace std;
int main() {
string a;
while(cin >> a)
{
cout << stoi(a, NULL, 16) <<endl;
}
}
说明:本博客所有内容为参考书籍以及他人博客总结,为个人学习笔记所用。