山科大 oj 编写函数:清除字符串首尾的空白符 (Append Code)
来源:互联网 发布:c语言malloc头文件 编辑:程序博客网 时间:2024/04/28 04:49
Description
在C语言中,将ASCII字符集中的制表符('\t')、回车符('\r')、换行符('\n')、垂直制表符('\v')、换页符('\f')和空格字符(' ')称作空白符。你的任务是读入每行字符串,去掉行首和行尾的连续空白符,但是在任意非空白符中间的空白符不要去除。
-----------------------------------------------------------------------------
编写一个函数trim(),把一个串首尾的空白符清除掉:
原型:char * trim(char *s);
功能:去掉字符串s首尾的连续空白符,s中在任意非空白符中间的空白符不要去除,并将s的首地址返回。
函数的调用格式见“Append Code”。
Input
输入为多行,每行为一个串(不超过100个字符),至某行输入的非空白符仅为“END”结束。
Output
输出为多行,为每行输入的去掉前后空白符的串。“END”也输出。
Sample Input
abcdefg 12345678XYZabc 123 END
Sample Output
abcdefg12345678XYZabc 123END
HINT
下面这些说法都是一个意思:“返回一个字符串S”、“返回字符串S的指针”、“返回字符串S的首地址”。
心路历程:这个题真是把我给坑苦了,这个题我使用的是isspace来判断是否为空字符,isspace的定义如下:
检查参数c是否为空格字符,也就是判断是否为空格(' ')、水平定位字符('\t')、归位键('\r')、换行('\n')、垂直定位字符('\v')或翻页('\f')的情况返回值若参数c为空格字符,则返回TRUE,否则返回NULL(0)。
我上来就自作主张的的吧true当作1来判断了,但是悲剧的是我的电脑的返回值它就是1,但是oj系统和他人电脑上的情况返回值都是其他的正数,这一个问题困扰了我一天之久,最后终于发现了问题。
其实这个题思路并不难想,从前面找到不为空字符第一个,也找到不为空字符的最后一个,并把结尾定义为'\0',然后将这个函数前后覆盖,得到的新字符串就是我们要得到的字符串。
#include<stdio.h>#include<string.h>#include<ctype.h>#define MAX_STR_LEN 110 char * trim(char *s){ int i, j, k; int len = strlen(s); for(i = 0; isspace(s[i]) > 0; i++); for(j = len - 1; isspace(s[j]) > 0; j--); //printf("%d %d\n", i, j); s[j + 1] = '\0'; for(k = 0; s[k + i] != '\0'; k++) s[k] = s[k + i]; s[k] = '\0'; return s;} int main(){ char str[MAX_STR_LEN], *p; do { gets(str); p = trim(str); puts(p); } while(strcmp(p, "END")); return 0;}
其实这个题目我还用了另外一种方法,但是不知道这样做到底是否正确,如有不妥,还请指出。用&s[i]来取地址。
#include<stdio.h>#include<string.h>#include<ctype.h>#define MAX_STR_LEN 110 char * trim(char *s){ int i, j; int len = strlen(s); for(i = 0; isspace(s[i]) > 0; i++); for(j = len - 1; isspace(s[j]) > 0; j--); s[j + 1] = '\0'; return &s[i];} int main(){ char str[MAX_STR_LEN], *p; do { gets(str); p = trim(str); puts(p); } while(strcmp(p, "END")); return 0;}
0 0
- 山科大 oj 编写函数:清除字符串首尾的空白符 (Append Code)
- 山科大oj--编写函数:各位数字之和 (Append Code)
- 山科大oj--编写函数:各位数字之和 (Append Code)
- 山科大oj--字符串的连接 之一 (Append Code)
- 编写函数:日期的顺序 (Append Code)
- 实验9 问题 B: 编写函数:字符串的连接 之一 (Append Code)
- 实验9 问题 C: 编写函数:字符串的复制 之一 (Append Code)
- 实验9 问题 D: 编写函数:字符串的复制 之二 (Append Code)
- 实验10 问题 D: 编写函数:字符串的连接 之二 (Append Code)
- 实验9 Problem C: 编写函数:字符串的复制 之一 (Append Code)
- MySQL清除字符串首尾空格函数trim
- 编写函数:三个数的最大最小值 (Append Code)
- 山科大oj--三个数的最大最小值 (Append Code)
- 编写函数:Swap (I) (Append Code)
- 在JS原型prototype中编写提取整数和移除字符串首尾空白的trim方法
- 作业8 问题 A: 编写函数:比较字符串 之一 (Append Code)
- JQuery中去掉字符串首尾的空白字符
- postgresql去掉字符串空白符以及首尾空格
- C++动态库的编写与类的导出
- 这篇博文看完Maven就稳了
- c++学习(二):传值与传址
- 关于mybatis中xml文件中的#{}与${}的区别
- 谷歌抢赢AWS,在线公有云培训平台Qwiklabs收入囊中
- 山科大 oj 编写函数:清除字符串首尾的空白符 (Append Code)
- 静态链表初始化及相关操作
- Afinal框架讲解
- 设计
- hive的安装部署及测试,MySql安装
- could only be replicated to 0 nodes instead of minReplication (=1). There are 0 datanode(s) running
- nefuoj 2猜想
- 甲骨文云市场再发力,6亿美元收购DNS提供商Dyn
- HDOJ.1009 FatMouse' Trade (贪心)