C 字符串函數(shù)

2018-05-19 16:21 更新

學(xué)習(xí)C - C字符串函數(shù)

檢查字符串?dāng)?shù)據(jù)長(zhǎng)度

您可以使用string.h頭中的strlen()函數(shù)來獲取字符串?dāng)?shù)據(jù)的長(zhǎng)度。


  #include <stdio.h> 
  #include <string.h> 

  void string_length(); 

  int main(int argc, const char* argv[]) { 

      string_length(); 

      return 0; 
  } 

  void string_length(){ 
      char str[20] = "Hello world"; 

      printf("str: %s\n",str); 
      printf("length: %d\n",(int)strlen(str)); 

  } 

上面的代碼生成以下結(jié)果。


索引字符

你可以通過位置索引得到一個(gè)字符。string_var [index]語(yǔ)法提供了這個(gè)功能。

注意0是第一個(gè)索引。


  #include <stdio.h> 
  #include <string.h> 

  void string_explore(); 

  int main(int argc, const char* argv[]) { 

      string_explore(); 

      return 0; 
  } 

  void string_explore(){ 
      char str[15] = "Hello world"; 
      int index; 

      for(index=0; index<strlen(str); index++){ 
          printf("%c\n",str[index]); 
      } 

  } 

上面的代碼生成以下結(jié)果。


連接字符串

我們可以將字符串連接成一個(gè)字符串。

我們可以從string.h頭中使用strcat()函數(shù)。


  #include <stdio.h> 
  #include <string.h> 

  void concatenating(); 

  int main(int argc, const char* argv[]) { 

      concatenating(); 

      return 0; 
  } 

  void concatenating(){ 
      printf("====concatenating===\n"); 

      char str1[30] = "hello"; 
      char str2[10] = "wolrd"; 

      strcat(str1,str2); 
      printf("result: %s\n",str1); 

  } 

上面的代碼生成以下結(jié)果。

字符串轉(zhuǎn)換為數(shù)字

字符串類型轉(zhuǎn)換為數(shù)字,您可以使用sscanf()函數(shù)將String轉(zhuǎn)換為數(shù)字。


  #include <stdio.h> 
  #include <string.h> 

  void string_to_numeric(); 

  int main(int argc, const char* argv[]) { 
       
      string_to_numeric(); 

      return 0; 
  } 

  void string_to_numeric(){ 
      printf("====string_to_numeric===\n"); 
      char str1[10] = "10"; 
      char str2[10] = "28.74"; 

      int num1; 
      float num2; 

      sscanf(str1,"%d",&num1); 
      sscanf(str2,"%f",&num2); 

      printf("num1: %d\n",num1); 
      printf("num2: %f\n",num2); 

  } 

上面的代碼生成以下結(jié)果。

數(shù)字轉(zhuǎn)換為字符串

要將數(shù)字轉(zhuǎn)換為字符串類型,請(qǐng)使用sprintf()函數(shù)。

您可以自動(dòng)獲取String類型。


  #include <stdio.h> 
  #include <string.h> 

  void numeric_to_string(); 

  int main(int argc, const char* argv[]) { 

      numeric_to_string(); 
           
      return 0; 
  } 

  void numeric_to_string(){ 
      int n = 10; 
      float m = 23.78; 

      char num1[10]; 
      char num2[10]; 

      sprintf(num1,"%d",n); 
      sprintf(num2,"% .2f",m); 

      printf("num1: %s\n",num1); 
      printf("num2: %s\n",num2); 

  } 

上面的代碼生成以下結(jié)果。

字符串解析器令牌

解析String的簡(jiǎn)單解決方案使用具有delimiter參數(shù)的strtok()函數(shù)。

例如,你有String數(shù)據(jù);分隔符,并希望解析它。


  #include <stdio.h> 
  #include <string.h> 

  void string_parser(); 

  int main(int argc, const char* argv[]) { 

      string_parser(); 

      return 0; 
  } 

  void string_parser(){ 
      char cities[40] = "Tokyo;Berlin;London;New York"; 
      char token[2]=";"; 
      char* city; 

      printf("cities: %s\n",cities); 

      city = strtok(cities, token); 
      while(city  != NULL){ 
          printf("%s\n", city ); 
          city = strtok(NULL, token); 
      } 

  } 

上面的代碼生成以下結(jié)果。

復(fù)制字符串?dāng)?shù)據(jù)

您可以從String數(shù)據(jù)中復(fù)制一些字符。

使用strcpy()和strncpy()函數(shù)。


  #include <stdio.h> 
  #include <string.h> 

  void string_copy(); 

  int main(int argc, const char* argv[]) { 

      string_copy(); 

      return 0; 
  } 

  void string_copy(){ 
      char str[15] = "Hello world"; 
      char new_str[20]; 

      strcpy(new_str,str); 
      printf("str: %s\n",str); 
      printf("new_str: %s\n",new_str); 

      memset(new_str,  "\0", sizeof(new_str)); 
      strncpy(new_str,str,5); 
      printf("strncpy-new_str: %s\n",new_str); 

  } 

上面的代碼生成以下結(jié)果。

將字符串轉(zhuǎn)換為數(shù)字

C標(biāo)準(zhǔn)庫(kù)stdlib.h提供了一些函數(shù),用于將字符串轉(zhuǎn)換為數(shù)字。

atof - 將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)。

atoi - 將字符串轉(zhuǎn)換為整數(shù)。

這兩個(gè)函數(shù)都在下一個(gè)程序中演示。


#include <stdio.h> 
#include <stdlib.h> 
main()  
{ 
   char *str1 = "123.79"; 
   char *str2 = "55"; 
   float x; 
   int y; 
   printf("\nString 1 is \"%s\"\n", str1); 
   printf("String 2 is \"%s\"\n", str2); 
   x = atof(str1); 
   y = atoi(str2); 
   printf("\nString 1 converted to a float is %.2f\n", x); 
   printf("String 2 converted to an integer is %d\n", y); 
}  //end main  

上面的代碼生成以下結(jié)果。

strcmp()

strcmp()函數(shù)比較兩個(gè)字符串的相等性。


#include <stdio.h> 
#include <string.h> 
main() 
{ 
   char *str1 = "A"; 
   char *str2 = "A"; 
   char *str3 = "!"; 
   printf("\nstr1 = %s\n", str1); 
   printf("\nstr2 = %s\n", str2); 
   printf("\nstr3 = %s\n", str3); 

   printf("\nstrcmp(str1, str2) = %d\n", strcmp(str1, str2)); 
   printf("\nstrcmp(str1, str3) = %d\n", strcmp(str1, str3)); 
   printf("\nstrcmp(str3, str1) = %d\n", strcmp(str3, str1)); 
   if ( strcmp(str1, str2) == 0 ) 
      printf("\nLetter A is equal to letter A\n"); 
   if ( strcmp(str1, str3) > 0 ) 
      printf("Letter A is greater than character !\n"); 
   if ( strcmp(str3, str1) < 0 ) 
      printf("Character ! is less than letter A\n"); 
}  // end main 

strcmp()函數(shù)使用兩個(gè)字符串作為參數(shù),并使用相應(yīng)的字符代碼進(jìn)行比較。

比較兩個(gè)字符串后,strcmp()函數(shù)返回一個(gè)單一的數(shù)值,它指示第一個(gè)字符串是否等于,小于或大于第二個(gè)字符串。

下表更詳細(xì)地描述了strcmp()函數(shù)的返回值。

示例函數(shù)返回值描述
strcmp(string1,string2)0string1等于string2
strcmp(string1,string2)<0string1小于string2
strcmp(string1,string2)>0string1大于string2

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)