您的位置:首页 > 其它

c 语言中的字符串操作

2006-11-16 22:04 369 查看
本章集中讨论字符串操作,包括拷贝字符串,拷贝字符串的一部分,比较字符串,字符串右对齐,删去字符串前后的空格,转换字符串,等等。C语言提供了许多用来处理字符串的标准库函数,本章将介绍其中的一部分函数。
在编写C程序时,经常要用到处理字符串的技巧,本章提供的例子将帮助你快速学会一些常用函数的使用方法,其中的许多例子还能有效地帮助你节省编写程序的时间。

6.1 串拷贝(strcpy)和内存拷贝(memcpy)有什么不同?它们适合于在哪种情况下使用?

strcpy()函数只能拷贝字符串。strcpy()函数将源字符串的每个字节拷贝到目录字符串中,当遇到字符串末尾的null字符(/0)时,它会删去该字符,并结束拷贝。
memcpy()函数可以拷贝任意类型的数据。因为并不是所有的数据都以null字符结束,所以你要为memcpy()函数指定要拷贝的字节数。
在拷贝字符串时,通常都使用strcpy()函数;在拷贝其它数据(例如结构)时,通常都使用memcpy()函数。
以下是一个使用strcpy()函数和memcpy()函数的例子:


#include <stdio. h>




#include <string. h>






typedef struct cust-str ...{




int id ;




char last_name [20] ;




char first_name[l5];




} CUSTREC;




void main (void);




void main (void)






...{




char * src_string = "This is the source string" ;




char dest_string[50];




CUSTREC src_cust;




CUSTREC dest_cust;




printf("Hello! I'm going to copy src_string into dest_string! ");




/ * Copy src_ string into dest-string. Notice that the destination




string is the first argument. Notice also that the strcpy()




function returns a pointer to the destination string. * /




printf("Done! dest_string is: %s " ,




strcpy(dest_string, src_string)) ;




printf("Encore! Let's copy one CUSTREC to another. ") ;




prinft("I'll copy src_cust into dest_cust. ");




/ * First, intialize the src_cust data members. * /




src_cust. id = 1 ;




strcpy(src_cust. last_name, "Strahan");




strcpy(src_cust. first_name, "Troy");




/ * Now, Use the memcpy() function to copy the src-cust structure to




the dest_cust structure. Notice that, just as with strcpy(), the




destination comes first. * /




memcpy(&dest_cust, &src_cust, sizeof(CUSTREC));




printf("Done! I just copied customer number # %d (%s %s). " ,




dest_cust. id, dest_cust. first_name, dest_cust. last_name) ;




}



6. 2怎样删去字符串尾部的空格?

C语言没有提供可删去字符串尾部空格的标准库函数,但是,编写这样的一个函数是很方便的。请看下例:


#include <stdio. h>




# include <string. h>








void main (void);




char * rtrim(char * );




void main(void)






...{




char * trail_str = "This string has trailing spaces in it";




/ * Show the status of the string before calling the rtrim()




function. * /




printf("Before calling rtrim(), trail_str is '%s' i" , trail_str);




print ("and has a length of %d. " , strlen (trail_str));




/ * Call the rtrimO function to remove the trailing blanks. * /




rtrim(trail_str) ;




/ * Show the status of the string




after calling the rtrim() function. * /




printf("After calling rttim(), trail_ str is '%s' ", trail _ str );




printf ("and has a length of %d. " , strlen(trail-str)) ;




}




/ * The rtrim() function removes trailing spaces from a string. * /.








char * rtrim(char * str)






...{




int n = strlen(str)-1; / * Start at the character BEFORE




the null character (0). * /




while (n>0) / * Make sure we don't go out of hounds. . . * /






...{




if ( * (str + n) 1 =' ') / * If we find a nonspace character: * /






...{




* (str+n+1) = '' ; / * Put the null character at one




character past our current




position. * /




break ; / * Break out of the loop. * /




}




else / * Otherwise , keep moving backward in the string. * /.




n--;




}






return str; /**//*Return a pointer to the string*/




}





在上例中,rtrim()是用户编写的一个函数,它可以删去字符串尾部的空格。函数rtrim()从字符串中位于null字符前的那个字符开始往回检查每个字符,当遇到第一个不是空格的字符时,就将该字符后面的字符替换为null字符。因为在C语言中null字符是字符串的结束标志,所以函数rtrim()的作用实际上就是删去字符串尾部的所有空格。
6.3 怎样删去字符串头部的空格?

C语言没有提供可删去字符串头部空格的标准库函数,但是,编写这样的一个函数是很方便的。请看下例;


#include <stdio. h>




#include <string. h>








void main(void);




char * ltrim (char * ) ;




char * rtrim(char * ) ;




void main (void)






...{




char * lead_str = " This string has leading spaces in it. " ;,




/ * Show the status of the string before calling the Itrim()




function. * /




printf("Before calling Itrim(), lead-str is '%s' ", lead_str);




printf("and has a length of %d. " , strlen(lead_str));




/ * Call the Itrim() function to remove the leading blanks. * /.




Itrim(lead_str);




/ * Show the status of the string




after calling the Itrim() function. * /




prinft("After calling Itrim(), lead_str is '%s' ", lead_str);




print("and has a length of %d. '' , strlen(lead-str)) ;




}




/ * The Itrim() function removes leading spaces from a string. * /








char * ltrim(char * str)






...{




strrev(str) ; / * Call strrevO to reverse the string. * /






rtrim(str)). /**//* Call rtrimO to remvoe the "trailing" spaces.
* /




strrev(str); / * Restore the string's original order. * /




return str ; / * Return a pointer to the string. * /.




}




/ * The rtrim() function removes trailing spaces from a string. * /








char* rtrim(char* str)




{




int n = strlen (str)-l ; / * Start at the character BEFORE




the null character (
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: