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 (
在编写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 (
相关文章推荐
- C 语言中操作字符串的一些函数源代码(对比版)
- C#语言操作字符串详细介绍
- 【脚本语言系列】关于Python操作数据文本字符串,你需要知道的事
- C 语言中操作字符串的一些函数源代码
- C语言 编写字符串操作函数strrchr,在字符串中查找目标字符最后一次出现的位置,返回指向这次位置的指针。
- 7.C语言之字符串操作函数
- C语言字符串操作总结大全(超详细)
- C/C++语言字符串操作总结
- 我就发现,中、低级语言的字符串操作,实在是很累
- C 语言字符串操作函数API文档说明
- [Java语言] java常用字符串操作函数
- 【80X86汇编语言学习】【字符串处理】字符串操作举例strcat
- C 语言中操作字符串的一些函数源代码
- OC语言笔记(二):OC字符串操作
- 专题 C 语言中对字符串的操作 函数大全 三
- C/C++语言字符串操作总结大全(超详细)
- 数据结构c字符串操作语言版本
- Python语言基础--2(字符串的相关操作)
- C/C++语言字符串操作总结
- 【c++基础】11.c语言字符串操作