输入描述:
输入一行字符串,可以有空格
输出描述:
统计其中英文字符,空格字符,数字字符,其他字符的个数
示例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;
}