標籤:des style blog http color io ar for strong
轉自:http://blog.chinaunix.net/uid-24194439-id-90782.html
strcat 原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:把src所指字串添加到dest結尾處(覆蓋dest結尾處的‘\0‘)並添加‘\0‘。
說明:src和dest所指記憶體地區不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標。
舉例:
// strcat.c
#include <syslib.h>
#include <string.h>
main()
{
char d[20]="Golden Global";
char *s=" View";
clrscr();
strcat(d,s);
printf("%s",d);
getchar();
return 0;
}
程式執行結果為:
Golden Global View
strcpystrcpy 原型聲明:extern char *strcpy(char *dest,char *src); 標頭檔:string.h
功能:把src所指由NULL結束的字串複製到dest所指的數組中。
說明:src和dest所指記憶體地區不可以重疊且dest必須有足夠的空間來容納src的字串。
返回指向dest的指標。 典型實現 /**********************
* C語言標準庫函數strcpy的一種典型的工業級的最簡實現
* 傳回值:
* 返回目標串的地址。
* 對於出現異常的情況ANSI-C99標準並未定義,故由實現者決定傳回值,通常為NULL。
* 參數:
* strDeatination
* 目標串
* strSource
* 源串
***********************/
char *strcpy(char *strDestination, const char *strSource);
{
assert(strDestination && strSource);
while(*strDestination++ = *strSource++);
return strDestination;
}
strcmp 原型:extern int strcmp(char *s1,char * s2);
用法:#include <string.h>
功能:比較字串s1和s2。
說明:
當s1<s2時,傳回值<0
當s1=s2時,傳回值=0
當s1>s2時,傳回值>0
即:兩個字串自左向右逐個字元相比(按ASCII值大小相比較),直到出現不同的字元或遇‘\0‘為止。如:
"A"<"B" "a">"A" "computer">"compare"
舉例:
// strcmp.c
#include <syslib.h>
#include <string.h>
int main()
{
char *s1="Hello, Programmers!";
char *s2="Hello, programmers!";
int r;
clrscr();
r=strcmp(s1,s2);
if(!r)
printf("s1 and s2 are identical");
else
if(r<0)
printf("s1 less than s2");
else
printf("s1 greater than s2");
getchar();
return 0;
}
strlen
原型:extern unsigned int strlen(char *s);
用法:#include <string.h>
功能:計算字串s的(unsigned int型)長度
說明:返回s的長度,不包括結束符NULL。
舉例:
// strlen.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
clrscr();
printf("%s has %d chars",s,strlen(s));
getchar();
return 0;
}
下面給大家提供幾種實現strlen函數的原始碼,供大家參考:
-------------------------------------------------1:start------------------------------------
#include <stdio.h>
#include <assert.h>
typedef unsigned int u_int;
u_int Mystrlen(const char *str)
{
u_int i;
assert(str != NULL);
for (i = 0; str != ‘\0‘; i++);
return i;
}
------------------------------------------------1:end--------------------------------------
-------------------------------------------------2:start--------------------------------------
int strlen(const char *str)
{
assert(str != NULL);
int len = 0;
while((*str++) != ‘\0‘)
len++;
return len;
}http://baike.baidu.com/edit/id=736226
------------------------------------------------2:end ------------------------------------------
------------------------------------------------3:start------------------------------------------
int strlen(const char *str)
{
assert(str);
const char *p = str;
while(*p++!=NULL);
return p - str - 1;
}
-------------------------------------------------4:end-----------------------------------------
-------------------------------------------------5:start----------------------------------------
int strlen(const char *str)
{
assert(str);
const char *p = str;
while(*p++);
return p - str - 1;
}
-----------------------------------------------6:end----------------------------------------
簡單的總結一下:
以上各種實現的方式都是大同小異的,有的用的是變數,有的用的是指標。
其中,最後一個用的是遞迴的方式。其實,在實現庫函數的時候,是規定不可以
調用其他的庫函數的,這裡只是給大家一個方法,不用變數就可以實現strlen。
轉:strcat與strcpy與strcmp與strlen