【每日一练】9
输入描述:
输入一行字符串,可以有空格
输出描述:
统计其中英文字符,空格字符,数字字符,其他字符的个数
示例1
输入
1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][
输出
26 3 10 12
#include <iostream>
using namespace std;
/*
输入描述:
输入一行字符串,可以有空格
输出描述:
统计其中英文字符,空格字符,数字字符,其他字符的个数
示例1
输入
1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][
输出
26
3
10
12*/
int main()
{
string str;
int alphaNum = 0;
int spaceNum = 0;
int digtalNum = 0;
int otherNum = 0;
while(getline(cin,str)){
if(!str.empty()){
for(auto i : str){
if(isalpha(i))
alphaNum++;
else if(isdigit(i))
digtalNum++;
else if(isspace(i))
spaceNum++;
else
otherNum++;
}
}
cout << alphaNum << endl;
cout << spaceNum << endl;
cout << digtalNum << endl;
cout << otherNum << endl;
alphaNum = 0;
spaceNum = 0;
digtalNum = 0;
otherNum = 0;
str.clear();
}
return 0;
}
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
示例1
输入
abc
输出
3
#include <iostream>
#include <set>
using namespace std;
/*
编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127)。不在范围内的不作统计。
输入描述:
输入N个字符,字符在ACSII码范围内。
输出描述:
输出范围在(0~127)字符的个数。
示例1
输入
abc
输出
3
*/
int main()
{
string str;
set<char> str_set;
while(getline(cin , str)){
for(auto i : str){
str_set.emplace(i);
}
cout << str_set.size() << endl;
// for(auto i = str_set.begin();i != str_set.end();i++)
// cout << *i << endl;
str.clear();;
}
return 0;
}
求最大回文子串:
- 空间限制:32768K
- 算法知识视频讲解
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国**。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
输入描述:
输入一个字符串
输出描述:
返回有效密码串的最大长度
示例1
输入
ABBA
输出
4
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int getAllPalindrome(const string str,vector<string > &PalindromeStr){
string strTemp;
string::size_type size_index = 0;
string::size_type diff = 0;
int flag = 1,num_index = 0;
for(string::size_type i = 0;i < str.size()-1;i++){
// cout << "str[i] = " << str[i] << endl;
// cout << "==============" << endl;
while(str.find_first_of(str[i],i+diff+1) != string::npos){//找到
size_index = str.find_first_of(str[i],i+diff+1);
// cout << "size_index = " << size_index << endl;
// cout << "num_index = " << num_index << endl;
if(size_index){//找到
diff = size_index - i;
// cout << "diff = " << diff << endl;
for(string::size_type j = i;j < (i + (diff+1)/2);j++){
// cout << "j = " << j << endl;
// cout << size_index-num_index << endl;
if(str[j] == str[size_index-num_index])
flag = 1;
else{
flag = 0;
num_index = 0;
break;
}
num_index++;
// cout << "flag = " << flag << endl;
}
if(flag){//OK的
strTemp = str.substr(i,diff+1);
// cout << "strTemp = " << strTemp << endl;
PalindromeStr.push_back(strTemp);
// i += diff;
// cout << "i = " << i << endl;
// cout << "str[i] = " << str[i] << endl;
num_index = 0;
}
// cout << "==============" << endl;
}
}
// cout << "strTemp = " << strTemp << endl;
diff = 0;
strTemp.clear();
flag = 1;
}
return 0;
}
/* 最长回文子串 */
int main()
{
string str;
string PalindromeStr;
vector<string>::size_type max_length = 0;
vector<string > vec_PalindromeStr;
while(getline(cin,str)){
//处理,找到所有回文子串
if(getAllPalindrome(str,vec_PalindromeStr))
return 0;
for(vector<string>::size_type i = 0;i < vec_PalindromeStr.size();i++){
if(vec_PalindromeStr[i].size() > max_length){
max_length = vec_PalindromeStr[i].size();
PalindromeStr.clear();
PalindromeStr = vec_PalindromeStr[i];
}
}
// for(auto i : vec_PalindromeStr)
// cout << i << endl;
// cout << PalindromeStr << endl;
cout << PalindromeStr.size() << endl;
str.clear();
PalindromeStr.clear();
vec_PalindromeStr.clear();
max_length = 0;
}
return 0;
}
写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。例如:
输入描述:
输入N个字符
输出描述:
输出该字符串反转后的字符串
示例1
输入
abcd输出
dcba
#include <string>
#include <iostream>
using namespace std;
int main()
{
string str;
string strTemp;
while(getline(cin,str)){
strTemp.resize(str.size());
for(string::size_type i = 0;i < str.size();i++){
strTemp[i] = str[str.size()-i-1];
}
cout << strTemp << endl;
strTemp.clear();
str.clear();
}
return 0;
}
描述:
输入一个整数,将这个整数以字符串的形式逆序输出
程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001
输入描述:
输入一个int整数
输出描述:
将这个整数以字符串的形式逆序输出
示例1
输入
1516000输出
0006151
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
string strGet;
int num;
string strTemp;
while(cin >> num){
stringstream ss("");
ss << num;
strGet = ss.str();
strTemp.resize(strGet.size());
for(string::size_type i = 0;i < strGet.size();i++){
strTemp[i] = strGet[strGet.size()-i-1];
}
cout << strTemp << endl;
strTemp.clear();
strGet.clear();
}
return 0;
}
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组
示例1
输入
abc 123456789输出
abc00000 12345678 90000000
#include <iostream>
#include <string>
#include <vector>
using namespace std;
/*
•连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:
连续输入字符串(输入2次,每个字符串长度小于100)
输出描述:
输出到长度为8的新字符串数组
示例1
输入
abc
123456789
输出
abc00000
12345678
90000000
*/
int out_str(string str){
if(str.size() <= 8){
// cout << 8 - str.size() << endl;
str.append(8 - str.size(),'0');
cout << str << endl;
}
else{
cout << str.substr(0,8) << endl;
str = str.substr(8);
out_str(str);
}
return 0;
}
int main()
{
string str;
vector<string> vec_str;
while(getline(cin,str)){
vec_str.push_back(str);
str.clear();
}
for(vector<string>::size_type i = 0;i < vec_str.size();i++){
if(out_str(vec_str[i]))
return 0;
}
return 0;
}
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入
5输出
2
#include <iostream>
#include <map>
using namespace std;
/*
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入
5
输出
2
*/
int main()
{
int num,flag = 0;
map<char,size_t> map_char;
while(cin >> num){
//10进制转2进制
while(num >= 1){
if(num % 2 == 1 || (num == 1 && flag == 1))
++map_char['1'];
num /= 2;
if(num == 1)
flag++;
}
cout << map_char['1'] << endl;
}
return 0;
}