目录
Jzoj 字符串部分题目 传送门
1061: 【入门】茵茵的第一课 题目传送门
#include <bits/stdc++.h>
using namespace std;
char asd[11];
int main()
{
scanf("%s", asd);
printf("%s", asd);
return 0;
}
2008: 【入门】数字问题 题目传送门
#include <bits/stdc++.h>
using namespace std;
char asd[5];
int length;
int main()
{
scanf("%s", &asd);
length=strlen(asd);
printf("%d\n", length);
for(int i=0; i<length; ++i){
printf("%c ", asd[i]);
}
printf("\n");
for(int i=strlen(asd)-1; i>=0; --i){
printf("%c", asd[i]);
}
return 0;
}
1114: 【入门】数字和 题目传送门
#include <bits/stdc++.h>
using namespace std;
char asd[200];
int length, ans;
int main()
{
scanf("%s", &asd);
length=strlen(asd);
for(int i=0; i<length; ++i){
ans+=asd[i]-'0';
}
printf("%d", ans);
return 0;
}
1584: 【USACO】双数? 单数? 题目传送门
#include <bits/stdc++.h>
using namespace std;
int n, number;
char asd[61];
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; ++i){
scanf("%s", asd);
number=asd[strlen(asd)-1]-'0';
if(number%2){
printf("odd\n");
}
else{
printf("even\n");
}
}
return 0;
}
1650: 【入门】火柴棒等式(简版:) 题目传送门
#include <bits/stdc++.h>
using namespace std;
int ans, l, a[10]={6,2,5,5,4,5,6,3,7,6};
char asd[260];
int main()
{
scanf("%s", &asd);
l=strlen(asd);
for(int i=0; i<l; ++i){
if(asd[i]=='+' || asd[i]=='='){
ans+=2;
}
else if(asd[i]>='0' && asd[i]<='9'){
ans+=a[asd[i]-'0'];
}
}
printf("%d", ans);
return 0;
}
2006: 【入门】删除指定字符 题目传送门
#include <bits/stdc++.h>
using namespace std;
int l;
char asd[260], c;
int main()
{
gets(asd);
scanf("%c", &c);
l=strlen(asd);
for(int i=0; i<l; ++i){
if(asd[i]!=c){
printf("%c", asd[i]);
}
}
return 0;
}
2100: 【入门】字符串中的空格移位 题目传送门
#include <bits/stdc++.h>
using namespace std;
int cnt, l;
char asd[260];
int main()
{
gets(asd);
l=strlen(asd);
for(int i=0; i<l; ++i){
if(asd[i]!=' '){
printf("%c", asd[i]);
}
else{
cnt++;
}
}
while(cnt--){
printf(" ");
}
return 0;
}
2004: 【入门】大小写转换 题目传送门
#include <bits/stdc++.h>
using namespace std;
int l;
char asd[80];
int main()
{
gets(asd);
l=strlen(asd);
for(int i=0; i<l; ++i){
if(asd[i]>='a' && asd[i]<='z'){
printf("%c", asd[i]-32);
}
else if(asd[i]>='A' && asd[i]<='Z'){
printf("%c", asd[i]+32);
}
else{
printf("%c", asd[i]);
}
}
return 0;
}
1071: 【基础】扫描识别 题目传送门
#include <bits/stdc++.h>
using namespace std;
char a[100];
int length;
int main()
{
scanf("%s", &a);
length=strlen(a);
for(int i=0; i<length; ++i){
if(a[i]=='O'){
a[i]='0';
}
else if(a[i]=='l'){
a[i]='1';
}
else if(a[i]=='Z'){
a[i]='2';
}
else if(a[i]=='S'){
a[i]='5';
}
else if(a[i]=='b'){
a[i]='6';
}
else if(a[i]=='B'){
a[i]='8';
}
else if(a[i]=='q'){
a[i]='9';
}
printf("%c", a[i]);
}
return 0;
}
2010: 【入门】电报文字 题目传送门
#include <bits/stdc++.h>
using namespace std;
char a[10000];
int main()
{
gets(a);
for(int i=0; i<strlen(a); i++){
if(a[i]>='a' && a[i]<='z'){
if(a[i]!='z'){
a[i]++;
}
else{
a[i]='a';
}
}
}
for(int i=0; i<strlen(a); i++){
printf("%c",a[i]);
}
return 0;
}
2101: 【入门】字符串的反码 题目传送门
#include <bits/stdc++.h>
using namespace std;
int l;
char asd[80];
int main()
{
gets(asd);
l=strlen(asd);
for(int i=0; i<l; ++i){
if(asd[i]>='a' && asd[i]<='z'){
printf("%c", 'z'-asd[i]+'a');
}
else if(asd[i]>='A' && asd[i]<='Z'){
printf("%c", 'Z'-asd[i]+'A');
}
else{
printf("%c", asd[i]);
}
}
return 0;
}
2007: 【入门】保留整数 题目传送门
#include <bits/stdc++.h>
using namespace std;
int l;
bool flag;
char asd[80];
int main()
{
gets(asd);
l=strlen(asd);
for(int i=0; i<l; ++i){
//每次输出数字之前先检查前面有没有字符子串
if(asd[i]>='0' && asd[i]<='9'){
if(flag){ //表示前面有非数字的字符子串
flag=false;
printf("*");
}
printf("%c", asd[i]);
}
else{
flag=true;
}
}
if(flag){ //以字符结尾时
printf("*");
}
return 0;
}
2102: 【基础】删除字符串中间的* 题目传送门
#include <bits/stdc++.h>
using namespace std;
int l, first, last;
string asd;
int main()
{
getline(cin, asd);
l=asd.length();
//找到第一个不是'*'的下标
for(int i=0; i<l; ++i){
if(asd[i]!='*'){
first=i;
break;
}
}
//找到最后一个不是'*'的下标
for(int i=l-1; i>=0; --i){
if(asd[i]!='*'){
last=i;
break;
}
}
for(int i=0; i<first; ++i){
printf("%c", asd[i]);
}
for(int i=first; i<=last; ++i){
if(asd[i]!='*'){
printf("%c", asd[i]);
}
}
for(int i=last+1; i<l; ++i){
printf("%c", asd[i]);
}
if(first==last && first==0){ //假如全是***, 会少输出一个, 这里单独加一个
printf("*");
}
return 0;
}
2103: 【基础】字符串压缩 题目传送门
#include <bits/stdc++.h>
using namespace std;
char s[256];
int l, cnt=1;
int main()
{
scanf("%s", &s);
l=strlen(s);
for(int i=0; i<l; ++i){
if(s[i]==s[i+1]){
cnt++;
}
else{
if(cnt==1)
printf("%c", s[i]);
else
printf("%d%c", cnt, s[i]);
cnt=1;
}
}
return 0;
}
2104: 【基础】最长单词 题目传送门
#include <bits/stdc++.h>
using namespace std;
string s;
char ans[256];
int l, mx, cnt;
int main()
{
//输入一行带空格的字符串
getline(cin, s);
l=s.length();
for(int i=0; i<l; ++i){
//没到最后, 并且不等于空格
if(s[i]!=' ' && i!=l-1){
cnt++; //当前单词的长度
}
else if(s[i]==' '){ //遇到空格,开始新的单词
if(cnt>mx){
mx=cnt;
for(int j=1; j<=mx; ++j){
ans[j]=s[i-j];
}
}
cnt=0;
}
else if(i==l-1){ //最后一个单词
if(cnt+1>mx){
mx=cnt+1;
for(int j=1; j<=mx; ++j){
ans[j]=s[i-j+1];
}
}
}
}
for(int i=mx; i>=1; --i){
printf("%c", ans[i]);
}
return 0;
}
2105: 【基础】字符串连接 题目传送门
#include <bits/stdc++.h>
using namespace std;
string s1, s2;
bool vis[27];
int l1, l2;
int main()
{
cin >> s1 >> s2;
l1=s1.length();
l2=s2.length();
for(int i=0; i<l1; ++i){
if(vis[s1[i]-'a'+1]==false){
cout << s1[i];
vis[s1[i]-'a'+1]=true;
}
}
for(int i=0; i<l2; ++i){
if(vis[s2[i]-'a'+1]==false){
cout << s2[i];
}
}
return 0;
}
2705: 【基础】猜数字II 题目传送门
#include <bits/stdc++.h>
using namespace std;
char n[10];
int l, b, tag, num, cnt, temp;
int main()
{
scanf("%s", &n);
scanf("%d", &b);
l=strlen(n);
for(int i=0; i<l; ++i){
if(n[i]=='?'){
tag=l-i-1; //转换为10^tag次
}
else{
num+=(n[i]-'0')*pow(10, l-i-1);
}
}
for(int i=0; i<=9; ++i){
temp=num+i*pow(10, tag);
if(temp%b==0){
cnt++;
printf("%d\n", i);
}
}
if(cnt==0){
printf("-1");
}
return 0;
}
2722: 【基础】动物简介 题目传送门
#include<bits/stdc++.h>
using namespace std;
int n, len, l, ans;
char mod[500], s[500];
int main()
{
scanf("%d %s",&n, mod); //动物的名字
len=strlen(mod);
while(scanf("%s",s)!=EOF){
if(strlen(s)<len)
continue;
else{
l=strlen(s);
bool ok;
for(int i=0; i<l; i++){
ok=1;
for(int j=0; j<len; j++){
if(s[i+j]!=mod[j]){ //有不匹配的
ok=0;
break;
}
}
if(ok)
ans++;
}
}
}
printf("%d\n",ans);
return 0;
}
1049: 【入门】判断是否构成回文 题目传送门
#include <bits/stdc++.h>
using namespace std;
int n, j;
string s;
int main()
{
getline(cin, s);
n=s.length()-1;
for(int i=0; i<n/2; ++i){
j=n-i-1;
if(s[i]!=s[j]){
printf("FALSE");
return 0;
}
}
printf("TRUE");
return 0;
}
1059: 【基础】隐藏的最大整数 题目传送门
每个单词比较
#include <bits/stdc++.h>
using namespace std;
int n, mx, cur, curid, mxid;
string s;
bool flag; //flag为false表示重新开始找数字, flag为true表示累加数字
int main()
{
getline(cin, s);
n=s.length();
for(int i=0; i<n; ++i){
//如果s[i]不是数字, 重新开始找整数
if(s[i]>'9' || s[i]<'0'){
flag=false; //重新找数字
if(cur>mx){ //和最大值比较
mx=cur;
mxid=curid;
cur=0;
}
}
else{ //s[i]是数字
if(flag){ //前面已经有数字了, 直接累加
cur=cur*10+s[i]-'0';
}
else{ //前面的数字断开了
cur=s[i]-'0';
curid=i+1;
flag=true;
}
}
}
if(cur>mx){
mxid=curid;
}
printf("%d", mxid);
return 0;
}
每一行比较
#include<bits/stdc++.h>
using namespace std;
int n, len, l, ans;
char mod[500];
string s;
int main()
{
scanf("%d", &n);
scanf("%s ", mod); //本题测试数据不规范, 需要用%s后面加空格的方法来吞掉多余的字符
len=strlen(mod);
while(n--){
getline(cin,s); //C++读入一行中间含空格的字符串
l=s.length();
if(l<len)
continue;
else{
bool ok;
for(int i=0; i<l; i++){ //枚举每一行动物简介
ok=1;
//从动物简介的第i个位置和动物的名字开始挨个比较
for(int j=0;j<len;j++){ //枚举动物名字
if(s[i+j]!=mod[j]){ //只要出现和动物名字不相等的,就不比了
ok=0;
break;
}
}
//完全匹配
if(ok){
//找到一个
ans++;
}
}
}
}
printf("%d\n",ans);
return 0;
}
1075: 【基础】趣味填空 题目传送门
#include <bits/stdc++.h>
using namespace std;
int n, rightnum, a, b, id;
string s;
bool flag;
int main()
{
getline(cin, s);
n=s.length();
for(int i=0; i<n; ++i){
if(s[i]=='='){
flag=true;
id=i-1; //找=左边数字最后一位的下标
}
else if(flag==true && s[i]>='0' && s[i]<='9'){ //计算等号右边的数
rightnum=rightnum*10+s[i]-'0';
}
}
//i枚举+右边数的第一个可能的位置
for(int i=1; i<=id; ++i){
a=0;
b=0;
//计算此时+左边的数字
for(int j=0; j<i; ++j){
a=a*10+s[j]-'0';
}
//计算此时+右边的数字
for(int j=i; j<=id; ++j){
b=b*10+s[j]-'0';
}
if(a+b==rightnum){ //判断能否满足条件
printf("%d+%d=%d", a, b, rightnum);
return 0;
}
}
printf("Impossible!");
return 0;
}