A 大小写转换
#include <stdio.h>
#include <string.h>
int main()
{
char str[85] = {0};
while (scanf("%s", str) != EOF)
{
for (int i = 0; i < strlen(str); i++)
{
if (str[i] >= 'a' && str[i] <= 'z')
printf("%c", str[i] - 'a' + 'A');
else printf("%c", str[i]);
}
printf("\n");
}
return 0;
}
思路:遍历字符串,小写字母改大写,其他直接输出。
B 找第一个只出现一次的字符
#include <stdio.h>
#include <string.h>
int main()
{
int flag = 0, tong[128] = {0};
char str[100005] = {0}, *p ;
scanf("%s", str);
for (int i = 0; i < strlen(str); i++)
{
tong[str[i]]++;
p = strchr(str + i + 1, str[i]);
if (p == 0 && tong[str[i]] == 1)
{
printf("%c", str[i]);
flag++;
break;
}
}
if (!flag) printf("no");
return 0;
}
思路: 用strchr()
查找当前字符后面是否出现第二次,同时用桶进行检查是否是第一次出现。
C 基因相关性
#include <stdio.h>
#include <string.h>
int main()
{
char str1[505] = {0}, str2[505] = {0};
double t = 0 ,ans = 0;
scanf("%lf %s %s", &t, str1, str2);
for (int i = 0; i < strlen(str1); i++)
if (str1[i] == str2[i]) ans++;
ans /= strlen(str2) * 1.0;
if (ans >= t) printf("yes");
else printf("no");
return 0;
}
思路:同时遍历数组,相同ans++
,遍历完再除以字符串长度
D 简单密码
#include <stdio.h>
#include <string.h>
int main()
{
char a[205] = "\0";
scanf("%[^\n]" ,a);
for (int i = 0; i < strlen(a); i++)
{
if (a[i] >= 'A' && a[i] <= 'E') a[i] += 21;
else if (a[i] >= 'F' && a[i] <= 'Z')a[i] -= 5;
}
puts(a);
return 0;
}
思路:分组加减。
tips:scanf()
高级用法scanf("%[^\n]" ,a);
用于整行读入。
E 删除单词后缀
#include <stdio.h>
#include <string.h>
int main()
{
char a[205] = "\0";
scanf("%s" ,a);
int p = strlen(a);
if (a[p - 1] == 'r' && a[p - 2] == 'e')
strcpy(a + p - 2, "\0");
if (a[p - 1] == 'y' && a[p - 2] == 'l')
strcpy(a + p - 2, "\0");
if (a[p - 1] == 'g' && a[p - 2] == 'n' && a[p - 3] == 'i')
strcpy(a + p - 3, "\0");
puts(a);
return 0;
}
思路:直接看最后几位是否符合条件,符合用复制函数覆盖,不符合不做处理,最后输出。