?
#include<bits/stdc++.h>
using namespace std;
int main(){
string str ="123456789abcdefghiaklmn";
for(int i=0;i<10;i++) //把str看成一个字符串数组
cout<<str[i]<<" ";
cout << endl;
//find函数
cout<<"123的位置: "<<str.find("123")<<endl;
//输出:123的位置: 0
cout<<"34在str[2]到str[n-1]中的位置: "<<str.find("34",2)<<endl;
//输出:34在str[2]到str[n-1]中的位置: 2
cout<<"ab在str[0]到str[12]中的位置: "<<str.rfind("ab",12)<<endl;
//输出:ab在str[0]到str[12]中的位置: 9
//substr()函数
cout<<"str[3]及以后的子串:"<<str.substr(3)<<endl;
//输出:str[3]及以后的子串:456789abcdefghijklmn
//若小于限制长度则报错
cout<<"从str[2]开始的4个字符:"<<str.substr(2,4)<<endl;
//输出:从str[2]开始的4个字符:3456
//find()函数
str.replace(str.find("a"), 5, "@#");
cout<<str<<endl;
//输出:123456789@#fghiaklmn
//insert()函数
str.insert(2, "***");
cout<<"从2号位置插入: "<<str<<endl;
//输出:12***3456789@#fghiaklmn
//添加字符串:append()函数
str.append("$$$");
cout<<"在字符串str后面添加字符串:"<<str<<endl;
//输出: 12***3456789@#fghiaklmn$$$
//字符串长度
cout<<str.size()<<endl;
cout<<str.length()<<endl;
//交换字符串:swap()函数
string str1="aaa",str2="bbb";
swap(str1, str2);
cout<<str1<<" "<<str2<<endl;
//字符串比较函数:compare(),相等输出0,不等输出1
cout<<str1.compare(str2)<<endl;
if(str1==str2) cout <<"=="; //直接比较也行
if(str1!=str2) cout <<"!=";
return 0;
}
?
str1="12345678abcdefghi"
print(str1) #输出:12345678abcdefghi
print(str1[3]) #输出:4
print(str1[2:5]) #输出:345 截取一部分,左闭右开
print(str1[:5]) #输出:12345
print(str1[2:]) #输出:345678abcdefghi
print(len(str1)) #输出字符串长度: 17
str2="***"
str3="abc"
#合并字符串:+
str12=str1+str2
print(str12) #输出:12345678abcdefghi***
#也可以这样合并字符串
print(''.join([str1, str2])) #输出:12345678abcdefghi***
str_list = list(str1)
str_list.insert(4, "***") #在str1[4]插入
aa = ''.join(str_list)
print(aa) #输出:1234***5678abcdefghi
#重复输出
print(str2*2) #输出:******
#用\输出特殊符号
print("\\ \" \n ") #输出:\ " 换行
#查找子串
print(str3 in str1) #输出:True
print(str3 not in str1) #输出:False
str2,str3 = str3,str2 #交换
print(str2) #输出:abc
#比较
print(str2 == str3) #输出:False
print(str2 != str3) #输出:True
#str.find(str, beg=0, end=len(string)) 指定范围查找
print(str1.find("345")) #输出:2
print(str1.find("345", 10)) #输出:-1
print(str1.find("456", 2,20)) #输出:3
?
?
?
?
?
?
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int ans=0;
while(cin >> s) ans+=s.size();
cout << ans;
return 0;
}
参考答案1
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[10];
gets(s);
int ans=0;
for(int i=0;i<strlen(s);i++) {
if(s[i]>='A'&&s[i]<='Z') ans++;
if(s[i]>='a'&&s[i]<='z') ans++;
if(s[i]>='0'&&s[i]<='9') ans++;
}
printf("%d",ans);
return 0;
}
?
?
?
?
#include<bits/stdc++.h>
using namespace std;
int toi(string x){
if(x == "I") return 1;
if(x == "V") return 5;
if(x == "X") return 10;
if(x == "L") return 50;
if(x == "C") return 100;
if(x == "D") return 500;
if(x == "M") return 1000;
}
int main(){
int n; cin>>n;
while(n--){
string num; cin>>num;
int ans=0;
ans = toi(num.substr(num.length()-1,1));
for(int i=num.length()-2; i>=0; i--){
if(toi(num.substr(i,1)) >= toi(num.substr(i+1,1)))
ans+=toi(num.substr(i,1));
else
ans-=toi(num.substr(i,1));
}
cout<<ans<<endl;
}
return 0;
}
?
?
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
int t;
cin>>s>>t;
while(t--)
for(int i=0;i<s.length()-1;i++)
if(s[i]>s[i+1]) {
s.erase(i,1);
break;
}
cout<<s<<endl;
return 0;
}
?
?
#include<bits/stdc++.h>
using namespace std;
const int N = 1e2 + 5;
bool a[N][N]; //地图,1表示有雷,0无雷
signed main(){
int n , m;
cin >> n >> m;
for(int i = 1 ; i <= n ; i ++) //输入
for(int j = 1 ; j <= m ; j ++){
char c;
cin >> c;
if(c == '*') a[i][j] = 1;
}
for(int i = 1 ; i <= n ; i ++){
for(int j = 1 ; j <= m ; j ++){
if(a[i][j] == 1) printf("*"); //是地雷
else
cout << a[i+1][j+1] + a[i+1][j-1] + a[i+1][j] + a[i][j+1] + a[i][j-1] + a[i-1][j+1] + a[i-1][j] + a[i-1][j-1];
}
cout << endl;
}
return 0;
}
?
?
#include<bits/stdc++.h>
using namespace std;
int c[27]; //密码表
bool s[27],t[27]; //密文和原信息对应的26个字母
int main(){
string m,y,v; //m:密文,y:原文,v:要解密的密文
cin>>m>>y>>v;
int num=0; //破译的字母数量
for(int i=0;i<m.size();++i){ //遍历密文
if(!s[m[i]-'A'+1] && !t[y[i]-'A'+1]){ //这个字符还未解密
c[m[i]-'A'+1] = y[i]; //解密
s[m[i]-'A'+1] = t[y[i]-'A'+1] = true; //找到对应
num++;
}
else if(c[m[i]-'A'+1] != y[i]) { //冲突
cout<<"Failed";
return 0;
}
}
if(num!=26){ //解密的不够26个字母
cout<<"Failed";
return 0;
}
for(int i=0;i<v.size();++i) //输出
printf("%c",c[v[i]-'A'+1]);
}
?
?
#include<bits/stdc++.h>
using namespace std;
char mod[12] = "0123456789X"; //mod11后的十一个字符
int main(void){
char a[14];
gets(a); // cin>>a;
int t = 0;
for(int i = 0,j=1; i < 12; i++) {
if(a[i] == '-')
continue;
t += (a[i]-'0')*j;
j++;
}
if(mod[t%11] == a[12])
cout<<"Right";
else {
a[12] = mod[t%11]; //识别码错误,计算正确的识别码
puts(a); // cout << a;
}
return 0;
}
?
?
#include<bits/stdc++.h>
using namespace std;
int main() {
string str;
int p1,p2,p3 ;
cin >> p1>>p2>>p3>>str;
for(int i=0;str[i];i++){
char be=str[i-1], af=str[i+1];
char tmp=str[i];
if(tmp=='-'&&af>be&&(be>='0'&&af<='9'||be>='a'&&af<='z')){ //处理'-'
char j, p;
if(p3==1) //维持顺序
for(j=be+1; j<af; j++){
p = j;
if(p1==2) p=(p>='a')?p-32:p; //如果是字母就转成大写
else if(p1==3) p='*'; //是否输出'*'
for(int k=0; k<p2; k++) //输出p2个
printf("%c",p);
}
else //改为逆序
for(j=af-1; j>be; j--){
p = j;
if(p1==2) p=(p>='a')?p-32:p; //如果是字母就转成大写
else if(p1==3) p='*'; //是否输出'*'
for(int k=0; k<p2; k++) //输出p2个
printf("%c",p);
}
}
else //其他情况:原样输出
printf("%c",tmp);
}
return 0;
}
?
#include<bits/stdc++.h>
using namespace std;
char s[1050];
void maketree(int x,int y){
if(y>x){
maketree(x,(x+y)/2);
maketree((x+y+1)/2,y);
}
int B=1,I=1;
for(int i=0;i<=y-x;i++){
if(s[x+i]=='1') B=0;
else if(s[x+i]=='0') I=0;
}
if(B) cout<<'B';
else if(I) cout<<'I';
else cout<<'F';
}
int main() {
int n;
cin>>n>>s;
maketree(0,(1<<n)-1);
return 0;
}
?
?
#include<bits/stdc++.h>
using namespace std;
#define N 100
int n;
int ans = 0;
string word[N]; //存单词
int vis[N]; //记录每一个单词被使用了几次
bool check(string s,string m,int k){ //判断是否能拼接。用substr实现
int len = s.size();
if(s.size()<k || m.size()<k) return false;
if(s.substr(len-k,k) == m.substr(0,k))
//s的后k个和m的前k个相同,能拼接
return true;
return false;
}
bool check1(string s,string m,int k){ //判断:简单实现
int lens = s.length();
for (int i=0;i<k;i++){
if(s[lens-k+i]!=m[i])
return false;
}
return true;
}
string add(string s,string m,int k){ //拼接:用substr实现
int len = m.size();
s = s + m.substr(k,len-k); //拼接,把m接到s上。
return s;
}
string add1(string s,string m,int k){ //拼接:简单实现
int len = m.size();
for (int i=k;i<len;i++)
s+=m[i];
return s;
}
void dfs(string dragon){ //dragon:目前拼接好的龙串
int len = dragon.size();
ans = max(ans, len);
for (int i=1;i<=n;i++){
if (vis[i]>=2) continue; //题目说每个单词最多用2次
int k = word[i].size();
for (int j=1;j<=k;j++) //枚举拼接长度
if (check(dragon,word[i],j)){
string temp = dragon;
temp = add(temp,word[i],j);
vis[i]++;
dfs(temp);
vis[i]--;
}
}
}
int main(){
cin >> n;
for (int i=1;i<=n;i++) cin >> word[i];
string first; cin >> first;
dfs(first); //用dfs搜索所有可能的拼接
cout << ans << endl;
return 0;
}
?
?
?
?
#include<bits/stdc++.h>
using namespace std;
int h[101][101]; //输入每个位置的高度
int z[6]={2,1,0,0,0,0},s[6]={6,6,6,6,5,4};
char c[1001][1001]; //最后的平面映射图
int maxx,maxy; //平面图的最大行、列
char cube[10][10]={ //小立方体
" +---+",
" / /|",
"+---+ |",
"| | +",
"| |/",
"+---+",
};
void draw(int x,int y){ //立体图映射成平面图
for(int i=5;i>=0;i--) //立方体需要倒过来存
for(int j=z[i];j<=s[i];j++){ //分别是这一行的宽度
c[5-i+x][j+y]=cube[i][j];
if(5-i+x>maxx) maxx=5-i+x; //最大的右上角长宽
if(j+y>maxy) maxy=j+y;
}
}
int main(){
int n,m; cin >>n>>m;
for(int i=1;i<=n;i++)
for(int j=0;j<m;j++)
cin>>h[i][j]; //高
for(int i=1;i<=n;i++) //长
for(int j=0;j<m;j++) //宽
for(int k=0;k<h[i][j];k++) //高
draw((n-i)*2+1+3*k,(n-i)*2+1+4*j); //计算每个位置的小立方体的左下角坐标
for(int i=maxx;i>=1;i--) {
for(int j=1;j<=maxy;j++)
if(c[i][j]==0) cout<<".";
else cout << c[i][j];
cout<<endl;
}
}
?
|