首頁>技術>

字串相關1.char *gets(char *s);#include<stdio.h>

功能:   從標準輸入讀入字元,並儲存到s指定的記憶體空間,直到出現換行符或讀到檔案結尾為止引數:  s:字串首地址返回值:   成功:讀入的字串   失敗:NULL

gets(str)與scanf(“%s”,str)的區別:  gets(str)允許輸入的字串含有空格  scanf(“%s”,str)不允許含有空格注意:  由於scanf()和gets()無法知道字串s大小,必須遇到換行符或讀到檔案結尾為止才接收輸入,因此容易導致字元陣列越界(緩衝區溢位)的情況。

舉例:

printf("請輸入str: ");gets(str);printf("str = %s\n", str);
2.char *fgets(char *s, intsize, FILE *stream);#include<stdio.h>

功能:   從stream指定的檔案內讀入字元,儲存到s所指定的記憶體空間,直到出現換行字元、讀到檔案結尾或是已讀了size - 1個字元為止,最後會自動加上字元 '\0' 作為字串結束

引數:  s:字串  size:指定最大讀取字串的長度(size - 1)  stream:檔案指標,如果讀鍵盤輸入的字串,固定寫為stdin

返回值:  成功:成功讀取的字串  讀到檔案尾或出錯: NULL描述:  fgets()在讀取一個使用者透過鍵盤輸入的字串的時候,同時把使用者輸入的回車也做為字串的一部分。透過scanf和gets輸入一個字串的時候,不包含結尾的“\n”,但透過fgets結尾多了“\n”。fgets()函式是安全的,不存在緩衝區溢位的問題。

舉例:

char str[100];printf("請輸入str: ");fgets(str, sizeof(str), stdin);printf("str = \"%s\"\n", str);
3.int puts(const char *s);#include<stdio.h>

功能:   標準裝置輸出s字串,在輸出完成後自動輸出一個'\n'。

引數:   s:字串首地址。

返回值:  成功:非負數  失敗:-1舉例:

#include <stdio.h>int main(){    printf("hello world");    puts("hello world");    return 0;}
4.int fputs(const char *str, FILE *stream);#include<stdio.h>

功能:   將str所指定的字串寫入到stream指定的檔案中,字串結束符'\0'不寫入檔案。

引數:  str:字串  stream:檔案指標,如果把字串輸出到螢幕,固定寫為stdout。

返回值:  成功:0  失敗:-1注意:  fputs()是puts()的檔案操作版本,但fputs() 不會自動輸出一個'\n'。

舉例:

printf("hello world");puts("hello world");fputs("hello world", stdout);
5. size_t strlen(const char *s);#include<string.h>

功能:   計算指定指定字串s的長度,不包含字串結束符‘\0’.

引數:   s:字串首地址

返回值:   字串s的長度,size_t 為unsigned int型別

舉例:

char str[] = "abcdefg";int n = strlen(str);printf("n = %d\n", n);
6. char *strcpy(char *dest, const char *src);#include<string.h>

功能:   把src所指向的字串複製到dest所指向的空間中,'\0'也會複製過去

引數:  dest:目的字串首地址  src:源字元首地址

返回值:  成功:返回dest字串的首地址  失敗:NULL  注意: 如果引數dest所指的記憶體空間不夠大,可能會造成緩衝溢位的錯誤情況。

舉例:

char dest[20] = "123456789";char src[] = "hello world";strcpy(dest, src);printf("%s\n", dest);
7. char *strncpy(char *dest, const char *src, size_tn);#include<string.h>

功能:   把src指向字串的前n個字元複製到dest所指向的空間中,是否複製結束符看指定的長度是否包含'\0'。

引數:  dest:目的字串首地址  src:源字元首地址  n:指定需要複製字串個數

返回值:  成功:返回dest字串的首地址  失敗:NULL

舉例:

char dest[20] ;char src[] = "hello world";strncpy(dest, src, 5);printf("%s\n", dest);dest[5] = '\0';printf("%s\n", dest);
8. char *strcat(char *dest, const char *src);#include<string.h>

功能:   將src字串連線到dest的尾部,‘\0’也會追加過去

引數:  dest:目的字串首地址  src:源字元首地址

返回值:  成功:成功:返回dest字串的首地址  失敗:NULL

舉例:

char str[20] = "123";char *src = "hello world";printf("%s\n", strcat(str, src));
9. char *strncat(char *dest, const char *src, size_tn);#include<string.h>

功能:   將src字串前n個字元連線到dest的尾部,‘\0’也會追加過去

引數:  dest:目的字串首地址  src:源字元首地址  n:指定需要追加字串個數

返回值:  成功:成功:返回dest字串的首地址  失敗:NULL

舉例:

char str[20] = "123";char *src = "hello world";printf("%s\n", strncat(str, src, 5));
10. int strcmp(const char *s1, const char *s2);#include<string.h>

功能:   比較 s1 和 s2 的大小,比較的是字元ASCII碼大小。

引數:  s1:字串1首地址  s2:字串2首地址返回值:  相等:0  大於:>0  小於:<0舉例:

char *str1 = "hello world";char *str2 = "hello mike";if (strcmp(str1, str2) == 0){    printf("str1==str2\n");}elseif (strcmp(str1, str2) > 0){    printf("str1>str2\n");}else{    printf("str1<str2\n");}
11. int strncmp(const char *s1, const char *s2, size_tn);#include<string.h>

功能:   比較 s1 和 s2 前n個字元的大小,比較的是字元ASCII碼大小。

引數:  s1:字串1首地址  s2:字串2首地址  n:指定比較字串的數量

返回值:  相等:0  大於:>0  小於:<0舉例:

char *str1 = "hello world";char *str2 = "hello mike";if (strncmp(str1, str2, 5) == 0){    printf("str1==str2\n");}elseif (strcmp(str1, "hello world") > 0){    printf("str1>str2\n");}else{    printf("str1<str2\n");}
12. int sprintf(char *str , const char *format, ...);#include<stdio.h>

功能:   根據引數format字串來轉換並格式化資料,然後將結果輸出到str指定的空間中,直到出現字串結束符 '\0' 為止。

引數:  str:字串首地址  format:字串格式,用法和printf()一樣

返回值:  成功:實際格式化的字元個數  失敗: - 1

舉例:

char dst[100] = { 0 };int a = 10;char src[] = "hello world";printf("a = %d, src = %s", a, src);printf("\n");int len = sprintf(dst, "a = %d, src = %s", a, src);printf("dst = \" %s\"\n", dst);printf("len = %d\n", len);
13. int sscanf(const char *str, const char *format, ...);#include<stdio.h>

功能:   從str指定的字串讀取資料,並根據引數format字串來轉換並格式化資料。

引數:  str:指定的字串首地址  format:字串格式,用法和scanf()一樣

返回值:  成功:引數數目,成功轉換的值的個數  失敗: - 1

舉例:

char src[] = "a=10, b=20";int a;int b;sscanf(src, "a=%d,  b=%d", &a, &b);printf("a:%d, b:%d\n", a, b);
14. char *strchr(const char *s, intc);#include<string.h>

功能: 在字串s中查詢字母c出現的位置。

引數:  s:字串首地址  c:匹配字母(字元)

返回值:  成功:返回第一次出現的c地址  失敗: NULL

舉例:

char src[] = "ddda123abcd";char *p = strchr(src, 'a');printf("p = %s\n", p);
15. char *strstr(const char *haystack, const char *needle);#include<string.h>

功能:   在字串haystack中查詢字串needle出現的位置。

引數:  haystack:源字串首地址  needle:匹配字串首地址

返回值:  成功:返回第一次出現的needle地址  失敗: NULL

舉例:

char src[] = "ddddabcd123abcd333abcd";char *p = strstr(src, "abcd");printf("p = %s\n", p);
16.size_t strspn(const char* str1, const char* str2)#include<string.h>

功能:  用來計算str1字串開始部分匹配str2字串的字元個數返回值:  返回字串str1開頭連續包含字串str2內的字元數目。如果str所包含的字元都屬於str2,那麼返回str1的長度。如果str的第一個字元不屬於str2,那麼返回0

17.size_t strspn(const char* str1, const char* str2)

功能:  用來計算str1字串開始部分不匹配str2字串的字元個數返回值:  返回字串str1開頭部分不出現在字串str2內的字元數目。

18. char *strtok(char *str, const char *delim);#include<string.h>

功能:   來將字串分割成一個個片段。當strtok()在引數s的字串中發現引數delim中包含的分割字元時, 則會將該字元改為\0 字元,當連續出現多個時只替換第一個為\0。

引數:  str:指向欲分割的字串  delim:為分割字串中包含的所有字元

返回值:  成功:分割後字串首地址  失敗: NULL

舉例:

int main(void){    char input[16]="abc,d";    char*p;    /*strtok places a NULL terminator    infront of the token,if found*/    p=strtok(input,",");    if(p)        printf("%s\n",p);        /*Asecond call to strtok using a NULL        as the first parameter returns a pointer        to the character following the token*/    p=strtok(NULL,",");    if(p)        printf("%s\n",p);    return 0;}
19. int atoi(const char *nptr);#include<stdlib.h>

功能:   atoi()會掃描 nptr字串, 跳過前面的 空格字元,直到遇到 數字或 正負號才開始做 轉換,而遇到 非數字或 字串結束符('\0')才 結束轉換,並將結果返回 返回值。

引數:  nptr:待轉換的字串

返回值:  成功:轉換後整數  類似的函式有:  atof():把一個小數形式的字串轉化為一個浮點數。  atol():將一個字串轉化為long型別

舉例:

char str1[] = "-10";int num1 = atoi(str1);printf("num1 = %d\n", num1);char str2[] = "0.123";double num2 = atof(str2);printf("num2 = %lf\n", num2);
20.long int strtol(const char nptr,char *endptr,int base);;#include<stdlib.h>

功能:   strtol函式會將引數nptr字串根據引數base來轉換成長整型數,引數base範圍從2至36。引數:  nptr:待轉換的字串  endptr:是一個指標的地址,該指標被設定為標識輸入數字結束字元的地址  base:表示以什麼進位制寫入數字

返回值:  該函式返回轉換後的長整數,如果沒有執行有效的轉換,則返回一個零值。  類似的函式有:  strtoul():把字串轉換成unsigned 1ong型別的值  strtod():把字串轉換成double型別的值

舉例:

#include<stdio.h>#include<stdlib.h>#define LIM 30char *s_gets(char*st,int n);int main(){    char number[LIM];    char *end;    long value;    puts("Enter a number(empty line to quit):");    while(s_gets(number,LIM)&&number[0]!='\0')        value=strtol(number,&end,10);/*十進位制*/    printf("base 10 input,base 10 output:%1d,stopped at %s(%d)\n",value,end,*end);    value=strtol(number,&end,16);/*十六進位制*/    printf("base 16 input,base 10 output:%1d,stopped at %s(%d)\n",value,end,*end);    puts("Next number:");    puts("Bye!\n");    return 0;}char*s gets(char*st,int n){    char* ret_val;    int i=0;    ret val=fgets(st,n,stdin);    if (ret_val)        while (st[i]l='\n'&& st[i]!='\0')            i++;    if(st[i] =='\n')            st[i]='\0';    else        while (getchar()!='\n')              continue;    return ret_val;}

下面是該程式的輸出示例:Enter a number(empty line to quit):10base 10 input,base 10 output:10,stopped at(0)base 16 input,base 10 output:16,stopped at(0)Next number:10atom base 10 input,base 10 output:10,stopped at atom(97)base 16 input,base 10 output:266,stopped at tom (116)Next number:

Bye!  首先注意,當base分別為10和16時,字串"10"分別被轉換成數字10和16。還要注意,如果==end指向一個字元,end就是一個字元==。因此,第1次轉換在讀到空字元時結束,此時end指向空字元。列印end會顯示一個空字串,以%d轉換說明輸出end顯示的是空字元的ASCIl碼。  對於第2個輸入的字串,當base為10時,==end的值是'a'字元的地址==。==所以列印end顯示的是字串“atom”==,列印*end顯示的是'a’字元的ASCIl碼。然而,當base為16時,'a'字元被識別為一個有效的十六進位制數,strtol()函式把十六進位制數10a轉換成十進位制數266。  strtol()函式最多可以轉換三十六進位制,'a'~'z'字元都可用作數字。strtoul()函式與該函式類似,但是它把字串轉換成無符號值。strtod()函式只以十進位制轉換,因此它值需要兩個引數。  許多實現使用itoa()和ftoa()函式分別把整數和浮點數轉換成字串。但是這兩個函式並不是C標準庫的成員,可以用sprintf()函式代替它們,因為sprintf()的相容性更好。  數字既能以字串形式儲存,也能以數值形式儲存。把數字儲存為字串就是儲存數字字元。例如,數字213以‘2’、’1’、3’、‘\0’的形式被儲存在字串陣列中。以數值形式儲存213,儲存的是int型別的值。  C要求用數值形式進行數值運算(如,加法和比較)。但是在螢幕上顯示數字則要求字串形式,因為螢幕顯示的是字元。printf()和sprintf()函式,透過%d和其他轉換說明,把數字從數值形式轉換為字串形式,scanf()可以把輸入字串轉換為數值形式。C還有一些函式專門用於把字串形式轉換成數值形式。  假設你編寫的程式需要使用數值命令形參,但是命令形引數被讀取為字串。因此,要使用數值必須先把字串轉換為數字。如果需要整數,可以使用atoi()函式(用於把字母數字轉換成整數),該函式接受一個字串作為引數,返回相應的整數值。

字元分類函式
int isalnum(int c):檢查字元是否為數字或字母;(0~9,a~z,A~Z) int isalpha(int c):檢查字元是否為字母;(a~z, A~Z) int iscntrl(int c):檢查字元是否為控制字元;(八進位制000~037以及177的字元) int isdigit(int c):檢查字元是否為十進位制數字;(0~9) int isgraph(int c):檢查字元是否為圖形表示,依賴於使用語言的環境;0~9,a~z,A~Z,以及標點符號) int islower(int c):檢查字元是否為小寫的字母;(a~z) int isprint(int c):檢查字元是否為可列印的;(數字、字母、標點符號、空白字元) int ispunct(int c):檢查字元是否為標點符號;(! ” # $ % & ’ ( ) * + , - . / : ; < = > ? @ [ ] ^ _ ` { | } ~等) int isspace(int c):檢查字元是否為空白字元;(TAB、換行、垂直TAB、換頁、回車、空格) int isupper(int c):檢查字元是否為大寫字母;(A~Z) int isxdigit(int c):檢查字元是否為十六進位制數字;(0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f) 
字元轉換
int tolower(int c):轉化字元為小寫字母; int toupper(int c):轉化字元為大寫字母;

17
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Ubuntu安裝交叉編譯器的兩種方法