1.chomp的用法:
它对变量起作用,而此变量含有字符串。如果字符串结尾有换行符,chomp
可以去掉它。这基本上就是它能完成的所有功能,如下例:
$text="alineoftext\n "; #也可以由<STDIN>输入
chomp($text);
#去掉换行符(\n)。
它非常有用,基本上你的每一个程序都会用到它。如你将知道,这是将字符串末尾换行符去掉的最好方法。基于 Perl 中的
一条基本原则:在需要使用变量的地方,可以使用赋值表达式来代替。我们有更简单的使用 chomp 的方法。Perl 首先做赋
值运算,再使用这个变量。因此使用 chomp 的最常用方法是:
chomp($text=<STDIN>); #读入,但不含换行符
$text=<STDIN>;
chomp($text);
#同上,但用两步完成
第一眼见到时,第一种组合的方法看起来复杂些。如果把上述其看成两步操作,读一行再 chomp,那写成两个语句的方法
看起来自然些。如果将其看作一个操作,读入一行但不包括换行符,那写成一个语句的方法更恰当。由于绝大多数 Perl 程
序员使用第一种写法,你也应该使用它。
2.chop与chomp的区别:
chop()函数,只是去除最后一个字符。
chomp()函数,就要首先判断最后一个字符是不是为"\n",他才去除。
不知道在哪个源码网站看的源码,很好用就包了一下,呵呵。
mystr.h
#ifndef MY_STR_H #define MY_STR_H char * last_char_is(const char, int); void chomp(char *); void trim(char *s); #endif |
mystr.c
#include <string.h> #include <stdio.h> #include <ctype.h> char * last_char_is(const char *s, int c) { char *sret; if (!s) return NULL; sret = (char *)s+strlen(s)-1; if (sret>=s && *sret == c) return sret; else return NULL; } void chomp(char *s) { char *lc = last_char_is(s, '\n'); if(lc) *lc = 0; } void trim(char *s) { int len = strlen(s); printf ("\n%d\n", len); /* trim trailing whitespace */ while ( len > 0 && isspace(s[len-1])) s[--len]='\0'; /* trim leading whitespace */ memmove(s, &s[strspn(s, " \n\r\t\v")], len); } |
main.c
#include "mystr.h" #include <stdio.h> #include <unistd.h> #define MYFILE "list.txt" int main() { int page_size; page_size = getpagesize(); char buf[page_size]; FILE *f; printf ("\nprint list.txt by chomp\n"); f = fopen (MYFILE, "r"); while (fgets(buf, page_size, f)) { chomp(buf); printf ("#%s#", buf); } fclose(f); printf ("\nprint list.txt by chomp\n"); f = fopen (MYFILE, "r"); while (fgets(buf, page_size, f)) { trim(buf); printf ("#%s#", buf); } fclose(f); #if 0 chomp(list); printf ("%s\n", list); #endif printf("\n"); return 0; } |
makefile
CC=gcc CFLAGS=-Wall -g libs=main.o mystr.o all: main depend: $(CC) -MM *.c > .depend main: .depend $(libs) $(CC) -o $@ $(libs) ctags: ctags *.h *.c clean: rm -f main *.o |
list.txt
以备后用