A - 雷同检测
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1,s2;
getline(cin, s1);
getline(cin, s2);
int i;
int la = s1.size();
int lb = s1.size();
for(i = 0; i < min(la, lb); i++)
{
if(s1[i] == s2[i])
cout << i + 1 << ' ';
}
return 0;
}
B - 首字母大写
#include <iostream>
#include <string>
#include <ctype.h>
using namespace std;
int main()
{
string s1;
getline(cin, s1);
int word = 0;
int i, flag = 0, len = s1.size();
for(int i=0;i<len;i++) {
if(s1[i]==' ') word=0;
else if(word==0){
word=1;
flag=islower(s1[i]);
if(flag) {
s1[i] = toupper(s1[i]);
}
}
}
cout << s1;
return 0;
}
C - 大小写转换
#include <stdio.h>
#include <ctype.h>
#include <string.h>
char str[100];
int main()
{
while(scanf("%s",str)==1)
{
int len = strlen(str);
int i;
for(i = 0; i < len; i++)
{
if(islower(str[i]))
str[i] = toupper(str[i]);
}
printf("%s\n",str);
memset(str, '\0', sizeof str);
}
return 0;
}
D - 数字反转
#include <iostream>
using namespace std;
int main()
{
string s1;
getline(cin, s1);
int len = s1.size();
if(s1[0] == '0')
cout << 0;
int i;
i = len - 1;
while(s1[i] == '0') i--;
if(s1[0] == '-')
{
cout << '-';
for(i; i > 0; i--)
{
cout << s1[i];
}
}
else
{
for(i; i >= 0; i--)
{
cout << s1[i];
}
}
return 0;
}
E - 删除单词后缀
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s1;
getline(cin, s1);
int i, len = s1.size();
if(s1[len-2] == 'e'&&s1[len-1] == 'r'&&len != 2||s1[len-2] == 'l'&&s1[len-1] == 'y'&&len != 2)
{
len -= 2;
}
else if(s1[len - 3] == 'i'&&s1[len - 2] == 'n'&&s1[len - 1] == 'g'&& len != 3)
{
len -= 3;
}
for(i = 0; i < len; i++)
{
cout << s1[i];
}
return 0;
}
F - 判断字符串是否为回文
#include <iostream>
using namespace std;
int main()
{
string s1;
getline(cin, s1);
int len = s1.size();
int i = len / 2, flag = 0;
for(int j = 0; j < i; j++,len--)
{
if(s1[j] != s1[len - 1])
flag = 1;
}
if(flag == 0)
cout << "yes" << endl;
else
cout << "no" << endl;
return 0;
}
G - 基础数据结构——栈(1)
#include <iostream>
#include <stdio.h>
using namespace std;
char s1[200];
char s2[200];
int main()
{
while(gets(s1))
{
int i;
int inx = 0,flag = 0;
for(i = 0; s1[i] != '\0'; i++)
{
if(s1[i] == '(' || s1[i] == '[' || s1[i] == '{')
{
s2[inx++] = s1[i];
}
else if(s1[i] == ')')
{
inx--;
if(inx < 0 || s2[inx] != '(')
{
flag = 1;
break;
}
}
else if(s1[i] == ']')
{
inx--;
if(inx < 0 || s2[inx] != '[')
{
flag = 1;
break;
}
}
else if(s1[i] == '}')
{
inx--;
if(inx < 0 || s2[inx] != '{')
{
flag = 1;
break;
}
}
}
if(flag == 1 || inx != 0)
{
cout << "no" << endl;
}
else
{
cout << "yes" << endl;
}
}
return 0;
}
H - 字典序
#include <stdio.h>
#include <string.h>
char s1[10010];
char s2[10010];
int main()
{
scanf("%s",s1);
scanf("%s",s2);
if(strcmp(s1,s2) < 0)
puts("YES");
else
puts("NO");
return 0;
}
I - 验证子串
#include <stdio.h>
#include <string.h>
char s1[300];
char s2[300];
int main()
{
scanf("%s",s1);
scanf("%s",s2);
if(strstr(s1, s2))
{
printf("%s is substring of %s",s2,s1);
}
else if(strstr(s2,s1))
{
printf("%s is substring of %s",s1,s2);
}
else
{
printf("No substring");
}
return 0;
}
J - 子串查找
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define maxn 1000010
using namespace std;
char text[maxn], pattern[maxn];
int Next[maxn];
int main()
{
scanf("%s%s", text, pattern);
int la = strlen(text);
int lb = strlen(pattern);
memset(Next, 0, sizeof Next);
for(int i = 1; i < lb; i++)
{
int j = i;
while(j > 0)
{
j = Next[j];
if(pattern[j] == pattern[i])
{
Next[i + 1] = j + 1;
break;
}
}
}
int cnt = 0;
for(int i = 0, j = 0; i < la; ++i)
{
if(j < lb && pattern[j] == text[i])
{
j++;
}
else
{
while(j > 0)
{
j = Next[j];
if(text[i] == pattern[j])
{
j++;
break;
}
}
}
if(j == lb) cnt++;
}
cout << cnt << endl;
return 0;
}
K - 剪花布条
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
using namespace std;
#define maxn 1001
string a;
string b;
int Next[maxn];
void makenext(int bl)
{
Next[0] = 0;
for (int i = 1, j = 0; i < bl; i++)
{
while (j>0 && b[j] != b[i])
j = Next[j - 1];
if (b[i] == b[j])
{
j++;
}
Next[i] = j;
}
}
int kmp(int al, int bl)
{
makenext(bl);
int cnt = 0;
for (int i = 0, j = 0; i < al; i++)
{
while (j>0 && b[j] != a[i])
j = Next[j - 1];
if (b[j] == a[i])
j++;
if (j == bl){
cnt++;
j=0;
}
}
return cnt;
}
int main()
{
while ((cin >> a)&&(a != "#"))
{
cin >> b;
memset(Next, 0, sizeof(Next));
int al = a.length();
int bl = b.length();
int res = kmp(al, bl);
cout << res << endl;
}
}
L - 最长回文子串
#include <bits/stdc++.h>
using namespace std;
char s[1010];
int dp[1010][1010];
int main()
{
gets(s);
int len = strlen(s);
int ans = 1;
for(int i = 0; i < len; i++)
{
dp[i][i] = 1;
if(i < len - 1)
{
if(s[i] == s[i + 1])
{
dp[i][i + 1] = 1;
ans = 2;
}
}
}
for(int j = 3; j <= len; j++)
{
for(int i = 0; i + j - 1 < len; i++)
{
int l = i + j - 1;
if(s[i] == s[l] && dp[i + 1][l - 1] == 1)
{
dp[i][l] = 1;
ans = j;
}
}
}
cout << ans << endl;
return 0;
}