今天和明天满课,真的比较忙,有一堆作业要做。也就晚上抽空做了一点编程题。
学习了一些字符串函数:
strcmp函数——字符串比较函数
其一般形式为
strcmp(字符串1,字符串2)
strcmp是STRing CoMPare(字符串比较)的缩写。它的作用是比较字符串1和字符串2。
比较的结果由函数值带回。
(1)如果字符串1与字符串2相同,则函数值为0。
(2)如果字符串1>字符串2,则函数值为一个正整数。
(3)如果字符串1<字符串2,则函数值为一个负整数。
strlwr 函数——转换为小写的函数
其一般形式为
strlwr(字符串)
strlwr是STRing LoWeRcase(字符串小写)的缩写。函数的作用是将字符串中大写字母茶成小写字母。
strupr函数——转换为大写的函数
其一般形式为
strupr(字符串)
strupr是STRing UPpeRcase(字符串大写)的缩写。函数的作用是将字符串中小写字母换成大写字母。
strlen 函数——测字符串长度的函数
其一般形式为
strlen(字符数组)
strlen是STRing LENgth(字符串长度)的缩写。它是测试字符串长度的函数。其值为字符串中的实际长度(不包括\0'在内)。
例题:Little Petya喜欢礼物。 他的妈妈送给他两个长度相同的字符串作为礼物。 字符串由大写和小写字母组成。 现在Petya想按字典序比较这两个字符串。 但是字母的大小写无关紧要,即大写字母被认为等同于相应的小写字母。 请帮助Petya执行比较。
Input:
每个测试点包含两行字符串,长度为1 to 100 .保证长度相等且包含大小写字母
Output:
如果第一行小于第二行,输出 "-1". 如果第二行小于第一行,输出"1". 如果相等,输出"0".注意比较时要忽略字母的大小写
Examples:
Input
aaaa aaaA
Output
0
Input
abcdefg AbCdEfF
Output
1
#include<stdio.h>
#include<string.h>
int main()
{
char a[10000],b[10000];
int c;
gets(a);
gets(b);
strlwr(a);
strlwr(b);
c=strcmp(a,b);
if(c>0)
printf("1");
if(c<0)
printf("-1");
if(c==0)
printf("0");
return 0;
}
例题:小A需要写一个程序,对给定的字符串,进行如下处理: 1.删除所有的元音字符('A', 'O', 'E', 'I', 'U', 'Y') 2.将所有大写字符转换为小写字符 3.将剩下的每个字符前面加入一个'.' 帮助小A完成这个程序
Input
一行字符串,长度|s|满足(1 <= |s| <= 100)
Output
输出处理后的字符串
Examples
Input
tour
Output
.t.r
Input
Codeforces
Output
.c.d.f.r.c.s
Input
aBAcAba
Output
.b.c.b
#include<stdio.h>
#include<string.h>
int main()
{
char a[10000];
gets(a);
strlwr(a);
int n,i=0,r=0;
n=strlen(a);
for(i=0;i<n;i++)
{
if(a[i]=='a'||a[i]=='o'||a[i]=='u'||a[i]=='e'||a[i]=='i'||a[i]=='y')
{
for(r=i;r<n-1;r++)
{
a[r]=a[r+1];
}
n=n-1;
i=i-1;
}
}
for(i=0;i<n;i++)
printf(".%c",a[i]);
return 0;
}
例题:
“张某人”是个强迫症患者,它每次睡醒后都会看一下时间,它想知道在当前时间在之后下一个Good Time 在哪里?Good Time 是这样定义的:从左往右看和从右往左看是一样的,例如12:21,13:31。
Input
输入的第一行也是唯一一行以字符串“HH:MM”开头,格式为“HH”取值范围为“00”~“23”,“MM”取值范围为“00”~“59”。“HH”和“MM”都是两位数。
Output
在输入中给出的时间之后,打印一天中出现最快的回文时间。如果输入的时间是回文的,则在输入时间之后输出最快的回文时间。
Examples
Input
12:21
Output
13:31
Input
23:59
Output
00:00
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,c=0,d=0;
scanf("%d",&a);
getchar();
scanf("%d",&b);
if(a==23&&b>32)
printf("00:00");
if(a==23&&b<=32)
printf("23:32");
if(a!=23)
{
if(b>=(a%10*10+a/10))
{
a=a+1;
if(a>=10)
{
c=a%10;
d=a/10%10;
if(c>=6&&c<=9)
printf("20:02");
else
printf("%d:%d%d",a,c,d);
}
else
{
c=a;
if(c>=6&&c<=9)
printf("10:01");
else
printf("0%d:%d0",a,c);
}
}
else
{
if(a>=10){
c=a%10;
d=a/10%10;
if(c>=6&&c<=9)
printf("20:02");
else
printf("%d:%d%d",a,c,d);
}
else
{
c=a;
if(c>=6&&c<=9)
printf("10:01");
else
printf("0%d:%d0",a,c);
}
}
}
return 0;
}
例题:
你得到一个由26个键组成的键盘。键按一定的顺序排列在一行中。每个键对应一个唯一的小写拉丁字母。 你必须在这个键盘上打单词。它也只由小写的拉丁字母组成。 要输入一个单词s,你需要一个接一个地连续输入它的所有字母。要输入每个字母,你必须把你的手准确地放在相应的键上并按下它。 在键之间移动手需要的时间等于这些键的位置差的绝对值(键是从左到右编号)。没有时间花在按下按键和把你的手放在单词的第一个字母上。 例如,考虑一个键盘,其中从“a”到“z”的字母按连续的字母顺序排列。字母“h”、“e”、“l”和“o”分别位于8、5、12和15位。因此,它将花费|5 - 8| + |12 - 5| + |12 - 12| + |15 - 12| = 13个单位的时间来输入单词“hello”。 确定打印单词s需要多长时间
Input
第一行包含一个整数t(1≤t≤1000)-测试用例的数量。 接下来的2t行包含测试用例的描述。 描述的第一行包含一个键盘——一个长度为26的字符串,仅由小写拉丁字母组成。从“a”到“z”的每个字母在键盘上只出现一次。 第二行描述内容为“s”,由小写拉丁字母组成,长度为1 ~ 50个字符。
Output
打印t行,每行包含对应测试用例的答案。测试用例的答案是在给定的键盘上键入单词s所需的最小时间。
Example
Input
5 abcdefghijklmnopqrstuvwxyz hello abcdefghijklmnopqrstuvwxyz i abcdefghijklmnopqrstuvwxyz codeforces qwertyuiopasdfghjklzxcvbnm qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qwertyuiopasdfghjklzxcvbnm abacaba
Output
13 0 68 0 74
#include<stdio.h>
#include<string.h>
int main()
{
int n;
scanf("%d",&n);
char a[27],b[10000];
a[0]='1';
int i=0,r=0,z=0,t=0,k=0,c=0,l=0,o=0,m=0;
getchar();
for(i=0;i<n;i++)
{
for(r=1;r<27;r++)
scanf("%c",&a[r]);
getchar();
gets(b);
z=strlen(b);
for(r=0;r<z;r++)
{
for(t=1;t<27;t++)
{
if(a[t]==b[r])
{
if(m==0)
{
k=t;
o=0;
m++;
}
else
{
c=k;
k=t;
l=c-k;
if(l<0)
l=-l;
o=l+o;
}
}
}
}
printf("%d\n",o);
z=0;c=0;k=0;l=0;o=0;m=0;
}
return 0;
}
例题:
这是个签到题。 一开始你有一个只包含了0和1的字符串。 现在你希望这个字符串当中的所有1的下标组成的区间只有一个,也就是所有1是相邻的。 00,11,000111或者001111000都是符合的字符串。 1010,10001,111101都是不符合的字符串。 为了得到这样的字符串,你可以删除原来字符串中的若干个0,现在询问你最少需要删除几个0能得到这样的字符串。
Input
第一行包含了一个整数t(1 < = t < = 100)代表数据组数 接下来t行,每行为一组数据。 每行有一个字符串s,字符串只包含0和1且长度范围为1到100(闭区间)
Output
在t行中每行输出一个整数,代表对应数据组数的字符串变为满足要求的字符串所需的最少删除的0的个数。
Example
Input
3 00100111 00 11100
Output
2 0 0
#include<stdio.h>
#include<string.h>
int main()
{
int i=0,n,z,r=0,t=0,q=0,e=0;
char a[10000];
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
gets(a);
z=strlen(a);
for(r=0;r<z;r++)
{
if(a[r]=='1')
t=r;
}
for(r=0;r<z;r++)
{
if(a[r]=='1')
{
q=r;
break;
}
}
for(r=q;r<t;r++)
{
if(a[r]=='0')
e++;
}
printf("%d\n",e);
t=0;q=0;e=0;
}
return 0;
}
2021/11/23/ 23:52
今晚又有一堆事,又要通宵了_(:з」∠)_
注释,我会在风和日丽的一天补上的,时间有限,遁了遁了。