请将一串长度为5的纯字母文本译成一个密码,密码规律如下:用原来的字母后面的第4个字母代替原来的字母。如C用G代替(文本中不存在W/w、X/x、Y/y、Z/z等字母),最后得到的文本即为密码。
输入一串文本,长度固定为5。
输出对应的密码。格式为:
password is 密码
Input
China
Output
password is Glmre
#include
#include
int main()
{
int i;
char a[10],b[10];
gets(a);
for(i = 0; i < 5; i++){
b[i] = a[i] + 4;
}
printf("password is ");// 只输出一次
for(i = 0; i < 5; i++){
printf("%c",b[i]);
}
return 0;
}
编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
一个字符串,长度不超过80个字符。
删掉非英文字母后的字符串。
Input
abc123+xyz.5
Output
abcxyz
#include
#include
int main()
{
int i,j = 0;
char a[90],b[90];
gets(a);
for(i=0; a[i]!='\0'; i++){
if((a[i]>='a' && a[i]<='z') || (a[i]>='A' && a[i]<='Z')){
b[j++]=a[i];
}
}
for(i=0; i
把一个字符串里所有的大写字母换成小写字母,小写字母换成大写字母。其他字符保持不变。
输入为一行字符串,其中不含空格。长度不超过80个字符。
输出转换好的字符串。
Input
ABCD123efgh
Output
abcd123EFGH
#include
#include
int main()
{
int i,len;
char a[90],b[90];
gets(a);
len = strlen(a);
for(i = 0; i < len; i++){
if(a[i] >= 'A' && a[i] <= 'Z'){
a[i] = a[i] + 32;
}
else if(a[i] >= 'a' && a[i] <= 'z'){
a[i] = a[i] - 32;
}
}
printf("%s",a);
return 0;
}
**ascii码:A:65 Z:90
a:97 z:122
0:48 9:57
bLue 获得了一个字符串,现在他要把这个字符串按照某个分隔符来分割成若干个字符串,你能帮他实现吗?
输入数据有多组(数据组数不超过 100),到 EOF 结束。
每组数据输入一行,格式为 "s c",其中 s 为一个不含空格且长度不超过 1000 的字符串,表示待分割的字符串;c 为一个不是空格的字符,表示分隔符。
输入数据保证在待分割的字符串中,分隔符至少出现一次且不会出现在字符串开头或末尾,并且不会出现连续多个分隔符的情况。
对于每组数据,输出分割后的字符串,每个字符串占一行。
Input
123,DE , 0123.a,/45/6.8 /
Output
123 DE 0123.a, 45 6.8
#include
#include
int main()
{
int i,len;
char a[1005],c;
while(~scanf("%s %c",a,&c)){
len = strlen(a);
for(i = 0; i < len; i++){
if(a[i] == c){
printf("\n");
}
else {
printf("%c",a[i]);
}
}
printf("\n");
}
return 0;
}
从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。
第一行是一个字符串,不超过100个字符;
第二行是一个字符。
删除指定字符后的字符串。
Input
sdf$$$sdf$$ $
Output
sdfsdf 一、
#include
#include
int main()
{
char str[110],c;
int i,j,len;
scanf("%s\n %c",str,&c);
len = strlen(str);
for(i = 0; i < len; i++){
if(str[i] != c){
printf("%c",str[i]);
}
}
return 0;
}
二、
#include
#include
char a[100], b[100];
int main()
{
int len;
int j = 0, i;
gets(a);
len = strlen(a);
for(i = len - 1; i >= 0; i--){
b[j++] = a[i];
}
printf("%s", b);
return 0;
}
全字母句 (pangram) 指包含字母表中全部 26 种英文字母(不区分大小写)的句子,其常被用于展示英文字体的显示效果。
现在,bLue 得到了很多句子,他想知道哪些句子是全字母句。
输入数据有多组(数据组数不超过 100),到 EOF 结束。
每组数据包含一行长度不超过 100 的字符串。
对于每组数据,输出一行。
如果是全字母句则输出 "Yes",否则输出 "No"(不包括引号)。
Input
The quick brown fox jumps over the lazy dog. The 6th ACM Funny Programming For/While Contest
Output
Yes No
#include
#include
int main()
{
int i,j,count,len;
char str[105];
while(gets(str)){
count = 0;
len = strlen(str);
for(i = 0; i < len; i++){
if(str[i] >= 'a' && str[i] <= 'z'){
str[i] -= 32;// 全换成大写字母
}
}
for(j = 'A'; j <= 'Z'; j++){
for(i = 0; i < len; i++){
if(j == str[i]){
count++;
break;// 不能忘记!
}
}
}
if(26 == count){
printf("Yes\n");
}
else
printf("No\n");
}
return 0;
}
**大概思路是把字母全部换成一种形式,即全为大写或全为小写。这样会方便统计(这法子也太聪明了吧!!)
**break语句跳出的是最近的那层循环语句或者switch语句
输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字符)。
Input
I am a student a good programming problem ABCD abcd ABCD abcd
Output
a 2 o 4 A 2
#include
#include
int main()
{
int num[200];
char str[200];//与大小写字母的ASCII码有关。
int i,len,k;
int max;
while(gets(str)){
int num[200] = {0};//这行代码很重要!!
k = 0;
max = 0;
len = strlen(str);
for(i = 0; i < len; i++){
if(str[i] == ' '){
continue;// 跳过空格
}
num[str[i]]++;
}
for(i = 0; i < 200; i++){
if(num[i] > max){
max = num[i];
k = i;//此处是记录出现次数最多的字母与所对应的ASCII码。
}
}
printf("%c %d\n",k,max);
}
return 0;
}
**em……要注意的点很多,ASCII码、循环内数组初始化、记录次数最多的字母的ASCII码的值……这个题好难啊QAQ
给出一串字符,要求统计出里面的字母、数字、空格以及其他字符的个数。
字母:A, B, ..., Z、a, b, ..., z组成
数字:0, 1, ..., 9
空格:" "(不包括引号)
剩下的可打印字符全为其他字符。
测试数据有多组。
每组数据为一行(长度不超过100000)。
数据至文件结束(EOF)为止。
每组输入对应一行输出。
包括四个整数a b c d,分别代表字母、数字、空格和其他字符的个数。
Input
A0 ,
Output
1 1 1 1
#include
#include
int main()
{
int i,len;
int a = 0,b = 0,c = 0,d = 0;
char str[100005];
while(gets(str)){
a = 0;b = 0;c = 0;d = 0;// 每一组都要初始化
len = strlen(str);
for(i = 0; i < len; i++){
if((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')){
a++;
}
else if(str[i] >= '0' && str[i] <= '9'){
b++;
}
else if(str[i] == ' '){
c++;
}
else {
d++;
}
}
printf("%d %d %d %d\n",a,b,c,d);
}
return 0;
}
**啊啊啊总是忘记在循环内的初始化,,怎么破???
X现在要学习英文以及各种稀奇古怪的字符的了。现在他想把一串字符中的小写字母变成大写字符,大写字母变成小写字母,其他的保持不变。
输入有多组。
每组输入一个字符串,长度不大于80,不包含空格。
输出转换后的字符串
Input
A* B+
Output
a* b+
#include
#include
int main()
{
int i,len;
char str[85];
while(gets(str)){
len = strlen(str);
for(i = 0; i < len; i++){
if(str[i] >= 'a' && str[i] <= 'z'){
str[i] -= 32;
}
else if(str[i] >= 'A' && str[i] <= 'Z'){
str[i] += 32;
}
else
continue;// 跳过非字母的字符
}
printf("%s\n",str);
}
return 0;
}
请使用字符串比较函数,比较两个字符串的大小,并按要求输出比较后的结果。字符串最长不超过15个字符。
输入两个字符串str1和str2,如果第一个字符串与第二个字符串相等,输出str1=str2,如果第一个字符串大于第二个字符串,输出str1>str2,如果第一个字符串小于第二个字符串,输出str1 < str2。
第1行为第一个字符串。
第2行为第二个字符串。
在一行输出比较后的结果。例如"abc"与"abc"相等,输出为abc=abc,如果"ab"小于"abc”,输出ab < abc。
Input
ab abc
Output
abHint
#include
#include int main() { char str1[20], str2[20]; scanf("%s%s",str1, str2); int f = strcmp(str1, str2); if(f < 0){ printf("%s<%s",str1, str2); } else if(f == 0){ printf("%s=%s",str1, str2); } else { printf("%s>%s",str1, str2); } return 0; } K - 小鑫の日常系列故事(二)——石头剪子布
Description
小鑫在上幼儿园的时候,喜欢跟小伙伴健健玩石头剪子布的游戏 ,你能帮他们判断谁胜谁负么?
Input
输入有两行,每一行都有可能为“Rock”(石头),“Scissors”(剪子),”Cloth”(布)。第一行为小鑫的选择,第二行为健健的选择。
Output
输出有一行,如果小鑫赢了输出“Win”,输了输出“Lose”,平局输出“Equal”。(输出不包括引号)
Sample
Input
Rock ScissorsOutput
WinHint
#include
#include int main() { int n,m; char s[20]; scanf("%s\n",s); n=strlen(s); scanf("%s",s); m=strlen(s); if(n==4&&m==5) printf("Lose\n"); else if(n==4&&m==8) printf("Win\n"); else if(n==5&&m==4) printf("Win\n"); else if(n==5&&m==8) printf("Lose\n"); else if(n==8&&m==4) printf("Lose\n"); else if(n==8&&m==5) printf("Win\n"); else if(n==m) printf("Equal\n"); return 0; } **em……应该有别的方法吧
L - 找老乡
Description
新学期开始了,在学校勤学苦练的LeiQ有一天收到一个名单,上面有n个人的信息(姓名和地址),LeiQ知道有多少人是他的老乡以及老乡的名字。
Input
多组输入,每组的第一行是一个整数n(1<=n<=100),表示名单上人的数量。
接下来一行有一个字符串表示LeiQ的地址(1<=len<=20)
接下来n行,每行两个字符串,第一个是姓名,第二个是地址
Output
先输出老乡的名字(按照输入的顺序),最后输出老乡的人数。
Sample
Input
4 Laiyang Xiaoming Laiyang Xiaohong Heze Xiaohuang Laiwu Xiaoguang LaiyangOutput
Xiaoming Xiaoguang 2Hint
#include
#include int main() { int num, i, count; char str[25], a[100][25], b[100][25];//二维数组 while(~scanf("%d", &num)){ count = 0; scanf("%s", str);//注意:此处用gets()不行 for(i = 0; i < num; i++){ scanf("%s%s", a[i], b[i]); } for(i = 0; i < num; i++){ if(strcmp(str,b[i]) == 0){ printf("%s\n", a[i]); count++; } } printf("%d\n",count); } return 0; } **很疑惑真的很疑惑
下面这个比较好理解
#include
#include int main() { int num, i, count; char str[25], a[25], b[25]; while(~scanf("%d", &num)){ count = 0; scanf("%s", str);//注意:此处用gets()不行 for(i = 0; i < num; i++){ scanf("%s%s", a, b); if(strcmp(str,b) == 0){ printf("%s\n", a); count++; } } printf("%d\n",count); } return 0; } **只是输出结果8太一样,但oj平台也能通过。。。。。
M - 简单字符串排序
Description
从键盘输入10个学生的姓名和成绩,请按字典序排列学生的姓名并输出(姓名和成绩对应关系保持不变)。
Input
输入共11行,前10行每行是一个学生的姓名,最后一行是10个用空格分开的整数表示对应的10个学生成绩。(姓名大小不超过20个字符)
Output
输出姓名按字典序排列后的学生姓名和成绩,共10行,每个学生的姓名和成绩占一行,姓名和成绩间用逗号分开。
Sample
Input
Bush White Mark Jean Black Wood Jenny Frank Bill Smith 78 85 96 65 46 83 77 88 54 98Output
Bill,54 Black,46 Bush,78 Frank,88 Jean,65 Jenny,77 Mark,96 Smith,98 White,85 Wood,83Hint
#include
#include using namespace std; int main() { int t1, i, j, score[10]; string name[20], t2; for(i = 0; i < 10; i++){ cin >> name[i]; } for(i = 0; i < 10; i++){ cin >> score[i]; } for(i = 0; i < 9; i++){ for(j = 0; j < 9 - i; j++){ //冒泡排序 if(name[j] > name[j+1]){ t2 = name[j]; name[j] = name[j+1]; name[j+1] = t2; t1 = score[j]; score[j] = score[j+1]; score[j+1] = t1; } } } for(i = 0; i < 10; i++){ cout << name[i] << "," < **c++string类型的变量可以直接比较字符串大小 ,而c语言中必须用字符串函数
c:
#include
#include #include char a[10][21]; char c[21];//用来交换名字(字符串) int b[10];//用来存放学生成绩 int main() { int i, j; int t; for(i = 0; i < 10; i++){ scanf("%s", a[i]); }//scanf是以空格为结束标志,若用gets会使名字全部放在一个数组 for(i = 0; i < 10; i++){ scanf("%d", &b[i]); } for(j = 0; j < 9; j++){//外层for用于循环多次交换程序,使字符串排序完全,10个数交换,只需循环9次 for(i = 0; i < 9; i++){//内层for用于相邻两个字符串交换 if(strcmp(a[i], a[i + 1]) > 0){ strcpy(c, a[i]);//字符串的交换需要用字符串函数!!! strcpy(a[i], a[i + 1]); strcpy(a[i + 1], c); t = b[i]; b[i] = b[i + 1]; b[i + 1] = t; } } } for(i = 0; i < 10; i++){ printf("%s,%d\n", a[i], b[i]); } return 0; } N - 简单编码
Description
将一串文本译成密码,密码的规律是:
将原来的小写字母全部翻译成大写字母,大写字母全部翻译成小写字母,数字的翻译规律如下:
0——>9
1——>8
2——>7
3——>6
4——>5
5——>4
6——>3
7——>2
8——>1
9——>0
然后将所有字符的顺序颠倒。Input
输入一串文本,最大字符个数不超过100。
Output
输出编码后的结果。
Sample
Input
chinaOutput
ANIHCHint
#include
#include int main() { char a[105], t; int i; scanf("%s", a); int len = strlen(a); for(i = 0; i < len; i++){ if(a[i] >= 'a' && a[i] <= 'z'){ a[i] -= 32; } else if(a[i] >= 'A' && a[i] <= 'Z'){ a[i] += 32; } else if(a[i] >= '0' && a[i] <= '9'){ a[i] = 105 - a[i]; } } for(i = 0; i < len / 2; i++){ t = a[i]; a[i] = a[len - 1 -i];//时刻牢记数组下标从0开始的!! a[len - 1 - i] = t; } printf("%s", a); return 0; } 二:
#include
#include int main() { char a[105], t; int i; scanf("%s", a); int len = strlen(a); for(i = 0; i < len; i++){ if(a[i] >= 'a' && a[i] <= 'z'){ a[i] -= 32; } else if(a[i] >= 'A' && a[i] <= 'Z'){ a[i] += 32; } else if(a[i] >= '0' && a[i] <= '9'){ a[i] = 105 - a[i]; } } for(int i = len - 1; i >= 0; i--){ printf("%c", a[i]); } return 0; } O - 编码
Description
给你一个由大写字母组成的组成的字符串,你可以用如下规则对其进行编码:
1、 包含K个相同字母的连续字符串可以用KX表示,其中X是相同的字母。
2、 如果K为1,不输出K
Input
输入有多组,直到文件结束。每组一个字符串,长度为10000以内
Output
输出编码后的字符串。
Sample
Input
ABC ABBCCCOutput
ABC A2B3CHint
#include
#include int main() { int i, len; char a[10005]; while(~scanf("%s", a)){ int k = 1; len = strlen(a); for(i = 0; i < len; i++){ if(a[i] == a[i+1]){ k++; } else if(k != 1){ printf("%d%c", k, a[i]); k = 1; } else{ printf("%c", a[i]); } } printf("\n"); } return 0; } **if…else的四种用法1:
if...else语句的四种结构用法_kangshifu007的博客-CSDN博客
P - 字符逆序
Description
将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
Input
输入包括一行。
第一行输入的字符串。Output
输出转换好的逆序字符串。
Sample
Input
I am a studentOutput
tneduts a ma I#include
#include int main() { int i; char t, str[105]; scanf("%[^\n]", str); int len = strlen(str); for(i = 0; i < len / 2; i++){ t = str[i]; str[i] = str[len - 1 - i]; str[len - 1 - i] = t; } printf("%s", str); return 0; } **scanf:
① 遇空格、“回车”、“跳格”键。
② 遇宽度结束。
③ 遇非法输入。若想用scanf输入空格:scanf("%[^\n]",string) 即可。
**直接用gets(string)输入好像会更方便qwq
二:
#include
#include char a[100], b[100]; int main() { int len; int j = 0, i; gets(a); len = strlen(a); for(i = len - 1; i >= 0; i--){ b[j++] = a[i]; } printf("%s", b); return 0; } Q - 回文串判定
Description
输入一串字符(长度小于100),判断该串字符是否是回文串(正序读与逆序读内容相同)。
Input
输入一串字符(长度小于100)。
Output
若该串字符是回文串输出“yes",否则输出”no“。
Sample
Input
asdfgfdsaOutput
yes#include
#include int main() { int i; char str[105]; gets(str); int len = strlen(str); for(i = 0; i < len / 2; i++){ if(str[i] != str[len - 1 - i]){ break; } } if(i < len / 2){ printf("no\n"); } else{ printf("yes\n"); } return 0; } **唉,没那么复杂啦
二:
#include
#include int main() { int i, f = 1; char str[105]; gets(str); int len = strlen(str); for(i = 0; i < len / 2; i++){ if(str[i] != str[len - 1 - i]){ f = 0; break; } } if(!f){ printf("no\n"); } else{ printf("yes\n"); } return 0; } R - 小鑫の日常系列故事(七)——小纸条
Description
小鑫在高中的时候喜欢上了一个十分漂亮的女孩。那个女孩也很喜欢他,就答应成为他的女朋友。
但是大家都知道高中的生活是忙碌的,除了上课就是上课,有时候可能连课间时间都被老师占用。于是小鑫想出了在上课给女朋友传纸条的方法来表达自己的爱慕。
又但是她与小鑫之间的距离太远,中间必须通过同学来传递纸条。可他们并不想让同学们知道写的什么就想到加密纸条这种方法。方法如下:
他们每天都会约定加密常数n,举个例子,当n=1时,今天写的每一句话中所用的字母都会向后+1,比如:i love you就成了j mpwf zpv ,当然了当是z的时候,+1就等于a。
请你帮他女朋友解密他写的纸条么?
Input
输入为多组,每组为两行。
第一行为n,-50
第二行为一句话,只有小写字母和空格。长度小于10000
Output
输出解密之后的内容
Sample
Input
1 j mpwf zpvOutput
i love youHint
#include
#include int main() { char str[10005]; int n, i, t; while(~scanf("%d", &n)){ getchar();//作用是吸收'\n' gets(str); int len = strlen(str); for(i = 0; i < len; i++){ t = 0; if(str[i] != ' '){ t = str[i]; if(t - n < 'a'){ while(t - n < 'a'){ t = t + 26; } //if判断,while循环 } else if(t - n > 'z'){ while(t - n > 'z'){ t -= 26; } } str[i] = t; str[i] -= n; } } puts(str); } return 0; } **关于getchar():
getchar()的用法_鸶鰰KD的博客-CSDN博客_getchar
S - 简单密码破解
Description
密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈.
接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
假设渊子原来一个BBS上的密码为zvbo941987,为了方便记忆,他通过一种算法把这个密码变换成YUANzi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。
他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先边成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。Input
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾。
Output
输出渊子真正的密文。
Sample
Input
YUANzi1987Output
zvbo941987Hint
#include
#include int main() { char str[105]; int i, t; while(~scanf("%s", str)){ int len = strlen(str); for(i = 0; i < len; i++){ if(str[i] >= 'a' && str[i] <= 'c'){ str[i] = '2'; } if(str[i] >= 'd' && str[i] <= 'f'){ str[i] = '3'; } if(str[i] >= 'g' && str[i] <= 'i'){ str[i] = '4'; } if(str[i] >= 'j' && str[i] <= 'l'){ str[i] = '5'; } if(str[i] >= 'm' && str[i] <= 'o'){ str[i] = '6'; } if(str[i] >= 'p' && str[i] <= 's'){ str[i] = '7'; } if(str[i] >= 't' && str[i] <= 'v'){ str[i] = '8'; } if(str[i] >= 'w' && str[i] <= 'z'){ str[i] = '9'; } else if(str[i] >= 'A' && str[i] <= 'Y'){ str[i] += 33; } else if(str[i] == 'Z'){ str[i] = 'a'; } } printf("%s\n", str); } return 0; } T - 统计元音
Description
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
Sample
Input
2 aeiou my name is ignatiusOutput
a:1 e:1 i:1 o:1 u:1 a:2 e:1 i:3 o:0 u:1#include
#include int main() { char str[105]; int n, i; scanf("%d", &n); getchar();// 吸收换行符,不能少 while(n--){ int n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0; //把getchar放在这里就是错的qaq gets(str); int len = strlen(str); for(i = 0; i < len; i++){ if(str[i] == 'a'){ n1++; } else if(str[i] == 'e'){ n2++; } else if(str[i] == 'i'){ n3++; } else if(str[i] == 'o'){ n4++; } else if(str[i] == 'u'){ n5++; } } printf("a:%d\n", n1); printf("e:%d\n", n2); printf("i:%d\n", n3); printf("o:%d\n", n4); printf("u:%d\n", n5); printf("\n"); } } **getchar的作用是接收换行符,在循环外面接收一次就够了
U - C语言实验——单词统计
Description
从键盘输入一行字符(长度小于100),统计其中单词的个数,各单词以空格分隔,且空格数可以是多个。
Input
输入只有一行句子。仅有空格和英文字母构成。
Output
单词的个数。
Sample
Input
stable marriage problem Consists of Matching membersOutput
7#include
#include int main() { char a[105]; int i; gets(a); int len = strlen(a); int num = 0, flag = 0; for(i = 0; i < len; i++){ if(a[i] == ' '){ flag = 0; } else if(flag == 0){ flag = 1; num++; } } printf("%d", num); return 0; } **注意:多个连续空格相当于一个空格,单词数+1
V - C语言实验——保留整数
Description
输入一个字符串str1,把其中的连续非数字的字符子串换成一个‘*’,存入字符数组str2 中,所有数字字符也必须依次存入 str2 中。输出str2。
Input
输入为一行字符串str1,其中可能包含空格。字符串长度不超过80个字符。
Output
输出处理好的字符串str2。
Sample
Input
$Ts!47&*s456 a23* +B9kOutput
*47*456*23*9*#include
#include int main() { char str1[85], str2[85]; int i, m = 0; gets(str1); int len = strlen(str1); if(str1[0] >= '0' && str1[0] <= '9'){ str2[m++] = str1[0]; }// 先判断第一个字符 else { str2[m++] = '*'; } for(i = 1; i < len; i++){ if(str1[i] >= '0' && str1[i] <='9'){ str2[m++] = str1[i]; } else { if(str2[m-1] != '*'){// 先判断第一个字符的作用体现出来了 str2[m++] = '*'; } } } for(i = 0; i < m; i++){ printf("%c", str2[i]); } printf("\n"); return 0; } **差之毫厘,谬以千里
W - 字符串排序
Description
输入3个字符串,按字典序从小到大进行排序。
Input
输入数据有一行,分别为3个字符串,用空格分隔,每个字符串长度不超过100。
Output
输出排序后的三个字符串,用空格分隔。
Sample
Input
abcd cdef bcdeOutput
abcd bcde cdefHint
#include
#include char str[3][105];//是二维数组! char t[105]; int main() { int i, j; for(i = 0; i < 3; i++){ scanf("%s", str[i]); } for(i = 0; i < 3; i++){ for(j = 0; j < 2 - i; j++){ // 冒泡排序 if(strcmp(str[j], str[j+1]) > 0){ strcpy(t, str[j]); strcpy(str[j], str[j+1]); strcpy(str[j+1], t); } } } for(i = 0; i < 3; i++){ printf("%s ", str[i]); } return 0; } **666学到了,存储多个字符串就要用到二维数组了
X - C语言实验——合法的C标识符
Description
给出一个标识符,请你判断它是否是C语言合法的标识符。
Input
输入一个标识符,长度不超过100。
Output
判断是否合法,如果是输出YES,否则输出NO。
Sample
Input
123YouOutput
NOHint
C语言规定:标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。
#include
#include int main() { char str[110]; int i, len, flag = 1; scanf("%s", str); len = strlen(str); if((str[0] =='_') || (str[0] >= 'a' && str[0] <= 'z') || (str[0] >= 'A' && str[0] <= 'Z')){ for(i = 1; i < len; i++){ if(str[i] =='_' || (str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= '0' && str[i] <= '9')){ flag = 1; } else{ flag = 0; break; } } if(flag){ printf("YES"); } else if(!flag){ printf("NO"); } } else{ printf("NO"); } return 0; } **那一行break格外重要!
break:退出离它最近的一层循环
关于break:break的用法_h1265823的博客-CSDN博客
Y - X的旅游计划
Description
X在最后的几周安心学习,考试有惊无险,so,X和女友就要计划一下放假后的时间了,来一场说走就走的旅行,这是两个人的一致想法,但是究竟去哪里玩,就要好好考虑一下了。
X和他的女友都有一些自己想去的地方,于是X想让大家帮他找一找两个人都想去的地方。
Input
测试案例有多组,每个案例:
第一行输入两个数n,m(n < 100 && m < 100)。X想要去的地方有n个,女友想要去的地方有m个。
之后n行,每行一个字符串(长度小于10)表示X想去的地名。
之后m行,每行一个字符串(长度小于10)表示女友想去的地名。
Output
将在n中和在m中都出现过得字符串输出(字典序)。
如果没有相同的字符串,输出”sad!”(不含引号)。
Sample
Input
2 2 aaa bbb aaa bbb
Output
aaa bbb
Hint
#include
#include int main() { int m, n, i, j; char a[100][100], b[100][100]; while(~scanf("%d%d", &n, &m)){ for(i = 0; i < n; i++){ scanf("%s", a[i]); } for(i = 0; i < m; i++){ scanf("%s", b[i]); } int f = 0, t = 0; char c[100][100]; for(i = 0; i < n; i++){ for(j = 0;j < m; j++){ if(strcmp(a[i], b[j]) == 0){ f = 1; strcpy(c[t++], a[i]); } } } if(f==1){ char d[100][100]; for(i = 0; i < t - 1; i++){ for(j = 0; j < t - 1 - i; j++){ if(strcmp(c[j], c[j+1]) > 0){ //冒泡排序 strcpy(d[j], c[j]); strcpy(c[j], c[j+1]); strcpy(c[j+1], d[j]); } } } for(i = 0; i < t; i++){ printf("%s\n", c[i]); } } else{ printf("sad!\n"); } } return 0; } **我觉得字符串好像还可以?