题目描述:
编一个程序,输入一个字符串,将组成字符串的所有非英文字母的字符删除后输出。
要求输入一个长度小于80的字符串。
解题思路:
要求题目要求输入一个长度小于80的字符串,那我定义长度为80的字符数组,就不用考虑长度问题了。
定义两个字符数组。str[80] result[80]
输入字符串: gets(str)
判断str的中满足是英文条件的全部放到result字符数组中:
result[j++]=str[i];
最后输出结果即可:
puts(result);
题目要求
注意事项:
注意长度吧!80
参考代码:
#include <stdio.h> #include <string.h> int main() { char str[80],result[80]; gets(str); for(int i=0,j=0; i<strlen(str); i++) { if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') { result[j++]=str[i]; } } puts(result); }
解题思路:
首先还是定义长度为80的字符数组,免去长度问题,注: 本题OJ系统不严谨,不考虑长度也能通过。
不借助临时字符数组转存,由于字符串就是每个字符组成,每当有满足条件的字符就当做单个字符输出即可!
参考代码:
#include <stdio.h> #include <string.h> int main() { char str[80]; gets(str); for(int i=0; i<strlen(str); i++) { if(str[i]>='a'&&str[i]<='z'||str[i]>='A'&&str[i]<='Z') { putchar(str[i]); } } return 0; }
解题思路:
前面说过,OJ系统判断不是太严谨,所有参加测试的字符串长度都没有超过80。所以可以不用考虑长度因素。
参考代码:
#include <stdio.h> int main() { char ch; while((ch=getchar())!=EOF) { if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') { putchar(ch); } } return 0; }
测试环境:
Windows & Debian Kali
测试结果:
0.0分
11 人评分
#include <stdio.h> #define is_string(x) ('a'<=x&&x<='z')||('A'<=x&&x<='Z') int main() { char str[80]; gets(str); for(int i=0;str[i]!=0;i++) if(is_string(str[i])) printf("%c",str[i]); printf("\n"); return 0; }
#include <stdio.h> #include <string.h> int main(void) { char str[80] = {0,}; int i = 0, len = 0; gets(str); len = strlen(str); for (i = 0; i < len+1; ++i) { if (str[i] == '\0')break; if (('A' <= str[i] && str[i] <= 'Z') || ('a' <= str[i] && str[i] <= 'z'))continue; strcpy(&str[i], &str[i+1]); str[len--] = 0; --i; } puts(str); return 0; } 为什么这样错误50%呢?
一条咸鱼 2020-02-05 20:14:07 |
好像是strcpy()的问题,要先将str[i+1]里的内容复制到一个新的字符串中,再把新字符串的内容复制到str[i]。这样就OK了
分糖果 (C++代码)浏览:1537 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:577 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:683 |
三角形 (C语言代码)浏览:965 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:913 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:645 |
输入输出格式练习 (C语言代码)浏览:773 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:712 |
最好的,浏览:601 |
1025题 初学者,求帮忙看下,不知道哪错了浏览:325 |