1.字符串最后一个单词
计算并输出字符串最后一个单词的长度
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
char str[5001];
gets(str);
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;
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};
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(int i = 2; i * i < num; i++)
{
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;
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
#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;
}
|