天天看點

C字元串函數總彙

函數名: stpcpy

功 能: 拷貝一個字元串到另一個

用 法: char *stpcpy(char *destin, char *source);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char string[10];

char *str1 = "abcdefghi";

stpcpy(string, str1);

printf("%sn", string);

return 0;

}

函數名: strcat

功 能: 字元串拼接函數

用 法: char *strcat(char *destin, char *source);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char destination[25];

char *blank = " ", *c = "C++", *Borland = "Borland";

strcpy(destination, Borland);

strcat(destination, blank);

strcat(destination, c);

printf("%sn", destination);

return 0;

}

函數名: strchr

功 能: 在一個串中查找給定字元的第一個比對之處

用 法: char *strchr(char *str, char c);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char string[15];

char *ptr, c = 'r';

strcpy(string, "This is a string");

ptr = strchr(string, c);

if (ptr)

printf("The character %c is at position: %dn", c, ptr-string);

else

printf("The character was not foundn");

return 0;

}

函數名: strcmp

功 能: 串比較

用 法: int strcmp(char *str1, char *str2);

看Asic碼,str1>str2,傳回值 > 0;兩串相等,傳回0

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";

int ptr;

ptr = strcmp(buf2, buf1);

if (ptr > 0)

printf("buffer 2 is greater than buffer 1n");

else

printf("buffer 2 is less than buffer 1n");

ptr = strcmp(buf2, buf3);

if (ptr > 0)

printf("buffer 2 is greater than buffer 3n");

else

printf("buffer 2 is less than buffer 3n");

return 0;

}

函數名: strncmpi

功 能: 将一個串中的一部分與另一個串比較, 不管大小寫

用 法: int strncmpi(char *str1, char *str2, unsigned maxlen);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "BBB", *buf2 = "bbb";

int ptr;

ptr = strcmpi(buf2, buf1);

if (ptr > 0)

printf("buffer 2 is greater than buffer 1n");

if (ptr < 0)

printf("buffer 2 is less than buffer 1n");

if (ptr == 0)

printf("buffer 2 equals buffer 1n");

return 0;

}

函數名: strcpy

功 能: 串拷貝

用 法: char *strcpy(char *str1, char *str2);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char string[10];

char *str1 = "abcdefghi";

strcpy(string, str1);

printf("%sn", string);

return 0;

}

函數名: strcspn

功 能: 在串中查找第一個給定字元集内容的段

用 法: int strcspn(char *str1, char *str2);

程式例:

#include <stdio.h>

#include <string.h>

#include <alloc.h>

int main(void)

{

char *string1 = "1234567890";

char *string2 = "747DC8";

int length;

length = strcspn(string1, string2);

printf("Character where strings intersect is at position %dn", length);

return 0;

}

函數名: strdup

功 能: 将串拷貝到建立的位置處

用 法: char *strdup(char *str);

程式例:

#include <stdio.h>

#include <string.h>

#include <alloc.h>

int main(void)

{

char *dup_str, *string = "abcde";

dup_str = strdup(string);

printf("%sn", dup_str);

free(dup_str);

return 0;

}

函數名: stricmp

功 能: 以大小寫不敏感方式比較兩個串

用 法: int stricmp(char *str1, char *str2);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "BBB", *buf2 = "bbb";

int ptr;

ptr = stricmp(buf2, buf1);

if (ptr > 0)

printf("buffer 2 is greater than buffer 1n");

if (ptr < 0)

printf("buffer 2 is less than buffer 1n");

if (ptr == 0)

printf("buffer 2 equals buffer 1n");

return 0;

}

函數名: strerror

功 能: 傳回指向錯誤資訊字元串的指針

用 法: char *strerror(int errnum);

程式例:

#include <stdio.h>

#include <errno.h>

int main(void)

{

char *buffer;

buffer = strerror(errno);

printf("Error: %sn", buffer);

return 0;

}

函數名: strcmpi

功 能: 将一個串與另一個比較, 不管大小寫

用 法: int strcmpi(char *str1, char *str2);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "BBB", *buf2 = "bbb";

int ptr;

ptr = strcmpi(buf2, buf1);

if (ptr > 0)

printf("buffer 2 is greater than buffer 1n");

if (ptr < 0)

printf("buffer 2 is less than buffer 1n");

if (ptr == 0)

printf("buffer 2 equals buffer 1n");

return 0;

}

函數名: strncmp

功 能: 串比較

用 法: int strncmp(char *str1, char *str2, int maxlen);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "aaabbb", *buf2 = "bbbccc", *buf3 = "ccc";

int ptr;

ptr = strncmp(buf2,buf1,3);

if (ptr > 0)

printf("buffer 2 is greater than buffer 1n");

else

printf("buffer 2 is less than buffer 1n");

ptr = strncmp(buf2,buf3,3);

if (ptr > 0)

printf("buffer 2 is greater than buffer 3n");

else

printf("buffer 2 is less than buffer 3n");

return(0);

}

函數名: strncmpi

功 能: 把串中的一部分與另一串中的一部分比較, 不管大小寫

用 法: int strncmpi(char *str1, char *str2);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "BBBccc", *buf2 = "bbbccc";

int ptr;

ptr = strncmpi(buf2,buf1,3);

if (ptr > 0)

printf("buffer 2 is greater than buffer 1n");

if (ptr < 0)

printf("buffer 2 is less than buffer 1n");

if (ptr == 0)

printf("buffer 2 equals buffer 1n");

return 0;

}

函數名: strncpy

功 能: 串拷貝

用 法: char *strncpy(char *destin, char *source, int maxlen);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char string[10];

char *str1 = "abcdefghi";

strncpy(string, str1, 3);

string[3] = '';

printf("%sn", string);

return 0;

}

函數名: strnicmp

功 能: 不注重大小寫地比較兩個串

用 法: int strnicmp(char *str1, char *str2, unsigned maxlen);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *buf1 = "BBBccc", *buf2 = "bbbccc";

int ptr;

ptr = strnicmp(buf2, buf1, 3);

if (ptr > 0)

printf("buffer 2 is greater than buffer 1n");

if (ptr < 0)

printf("buffer 2 is less than buffer 1n");

if (ptr == 0)

printf("buffer 2 equals buffer 1n");

return 0;

}

函數名: strnset

功 能: 将一個串中的所有字元都設為指定字元

用 法: char *strnset(char *str, char ch, unsigned n);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char *string = "abcdefghijklmnopqrstuvwxyz";

char letter = 'x';

printf("string before strnset: %sn", string);

strnset(string, letter, 13);

printf("string after strnset: %sn", string);

return 0;

}

函數名: strpbrk

功 能: 在串中查找給定字元集中的字元

用 法: char *strpbrk(char *str1, char *str2);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char *string1 = "abcdefghijklmnopqrstuvwxyz";

char *string2 = "onm";

char *ptr;

ptr = strpbrk(string1, string2);

if (ptr)

printf("strpbrk found first character: %cn", *ptr);

else

printf("strpbrk didn't find character in setn");

return 0;

}

函數名: strrchr

功 能: 在串中查找指定字元的最後一個出現

用 法: char *strrchr(char *str, char c);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char string[15];

char *ptr, c = 'r';

strcpy(string, "This is a string");

ptr = strrchr(string, c);

if (ptr)

printf("The character %c is at position: %dn", c, ptr-string);

else

printf("The character was not foundn");

return 0;

}

函數名: strrev

功 能: 串倒轉

用 法: char *strrev(char *str);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char *forward = "string";

printf("Before strrev(): %sn", forward);

strrev(forward);

printf("After strrev(): %sn", forward);

return 0;

}

函數名: strset

功 能: 将一個串中的所有字元都設為指定字元

用 法: char *strset(char *str, char c);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char string[10] = "123456789";

char symbol = 'c';

printf("Before strset(): %sn", string);

strset(string, symbol);

printf("After strset(): %sn", string);

return 0;

}

函數名: strspn

功 能: 在串中查找指定字元集的子集的第一次出現

用 法: int strspn(char *str1, char *str2);

程式例:

#include <stdio.h>

#include <string.h>

#include <alloc.h>

int main(void)

{

char *string1 = "1234567890";

char *string2 = "123DC8";

int length;

length = strspn(string1, string2);

printf("Character where strings differ is at position %dn", length);

return 0;

}

函數名: strstr

功 能: 在串中查找指定字元串的第一次出現

用 法: char *strstr(char *str1, char *str2);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char *str1 = "Borland International", *str2 = "nation", *ptr;

ptr = strstr(str1, str2);

printf("The substring is: %sn", ptr);

return 0;

}

函數名: strtod

功 能: 将字元串轉換為double型值

用 法: double strtod(char *str, char **endptr);

程式例:

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

char input[80], *endptr;

double value;

printf("Enter a floating point number:");

gets(input);

value = strtod(input, &endptr);

printf("The string is %s the number is %lfn", input, value);

return 0;

}

函數名: strtok

功 能: 查找由在第二個串中指定的分界符分隔開的單詞

用 法: char *strtok(char *str1, char *str2);

程式例:

#include <string.h>

#include <stdio.h>

int main(void)

{

char input[16] = "abc,d";

char *p;

p = strtok(input, ",");

if (p) printf("%sn", p);

p = strtok(NULL, ",");

if (p) printf("%sn", p);

return 0;

}

函數名: strtol

功 能: 将串轉換為長整數

用 法: long strtol(char *str, char **endptr, int base);

程式例:

#include <stdlib.h>

#include <stdio.h>

int main(void)

{

char *string = "87654321", *endptr;

long lnumber;

lnumber = strtol(string, &endptr, 10);

printf("string = %s long = %ldn", string, lnumber);

return 0;

}

函數名: strupr

功 能: 将串中的小寫字母轉換為大寫字母

用 法: char *strupr(char *str);

程式例:

#include <stdio.h>

#include <string.h>

int main(void)

{

char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;

ptr = strupr(string);

printf("%sn", ptr);

return 0;

}

函數名: swab

功 能: 交換位元組

用 法: void swab (char *from, char *to, int nbytes);

程式例:

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

char source[15] = "rFna koBlrna d";

char target[15];

int main(void)

{

swab(source, target, strlen(source));

printf("This is target: %sn", target);

return 0;

}

PS:isalpha()是字元函數,不是字元串函數,

isalpha

原型:extern int isalpha(int c);

用法:#include <ctype.h>

功能:判斷字元c是否為英文字母

說明:當c為英文字母a-z或A-Z時,傳回非零值,否則傳回零。

舉例:

// isalpha.c

#include <syslib.h>

#include <ctype.h>

#include <stdio.h>

main()

{

int c;

clrscr(); // clear screen

printf("Press a key");

for(;;)

{

c=getchar();

clrscr();

printf("%c: %s letter",c,isalpha(c)?"is":"not");

}

return 0; // just to avoid warnings by compiler

}

函數名:sscanf

從一個字元串中讀進與指定格式相符的資料.

函數原型:

Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

int scanf( const char *format [,argument]... );

說明:

sscanf與scanf類似,都是用于輸入的,隻是後者以螢幕(stdin)為輸入源,前者以固定字元串為輸入源。

其中的format可以是一個或多個 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}

注:

1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳過此資料不讀入. (也就是不把此資料讀入參數中)

2、{a|b|c}表示a,b,c中選一,[d],表示可以有d也可以沒有d。

3、width表示讀取寬度。

4、{h | l | I64 | L}:參數的size,通常h表示單位元組size,I表示2位元組 size,L表示4位元組size(double例外),l64表示8位元組size。

5、type :這就很多了,就是%s,%d之類。

6、特别的:%*[width] [{h | l | I64 | L}]type 表示滿足該條件的被過濾掉,不會向目标參數中寫入值

支援集合操作:

%[a-z] 表示比對a到z中任意字元,貪婪性(盡可能多的比對)

%[aB'] 比對a、B、'中一員,貪婪性

%[^a] 比對非a的任意字元,貪婪性

例子:

char sztime1[16] = "", sztime2[16] = "";

sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);

需自創函數:

1、去除字元串中的前後空格

兩個循環

一個從頭往後找

一個從後來往前找

char * trim(char * src)

{

int i = 0;

char *begin = src;

while(src[i] != '/0'){

if(src[i] != ' '){

break;

}else{

begin++;

}

i++;

}

for(i = strlen(src)-1; i >;= 0;??i--){

if(src[i] != ' '){

break;

}else{

src[i] = '/0';

}

}

return begin;

}