C語言中的字符串函數

1、sscanf()

sscanf() - 從一個字符串中讀進與指定格式相符的數據。
int sscanf( const char *, const char *, ...);
int sscanf(const char *buffer,const char *format,[argument ]...);
buffer存儲的數據
format格式控制字符串
argument 選擇性設定字符串
sscanf會從buffer裏讀進數據,依照format的格式將數據寫入到argument裏。
頭文件:#include<stdio.h>
返回值:成功則返回參數數目,失敗則返回0,錯誤原因存於errno中。
1. 常見用法。
char buf[512] ;
sscanf("123456 ", "%s", buf);//此處buf是數組名,它的意思是將123456以%s的形式存入buf中!
printf("%s\n", buf);
結果爲:123456
2. 取指定長度的字符串。如在下例中,取最大長度爲4字節的字符串。
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
結果爲:1234
3. 取到指定字符爲止的字符串。如在下例中,取遇到空格爲止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf);
printf("%s\n", buf);
結果爲:123456
4. 取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
printf("%s\n", buf);
結果爲:123456abcdedf
當輸入:  sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);
printf("%s\n",buf);
結果爲:123456
5. 取到指定字符集爲止的字符串。如在下例中,取遇到大寫字母爲止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
printf("%s\n", buf);
結果爲:123456abcdedf

2、sprintf()

原型:int sprintf( char *buffer, const char *format, [ argument] … );

bufferchar型指針,指向將要寫入的字符串的緩衝區。
format:格式化字符串。
[argument]...:可選參數,可以是任何類型的數據。
返回值:字符串長度(strlen
#include <stdio.h>//某個頭文件
intmain ()/*主函數“整數”類型*/
{
      charbuffer [50];/*“字符”類型的數組,下面共有50個元素。*/
      intn, a=5, b=3;/*三個變量都爲“整數”類型*/
      n=sprintf(buffer,"%d plus %d is %d", a, b, a+b);/*賦予數值*/
      printf("[%s] is a string %d chars long\n",buffer,n);/*“格式輸出”*/
 
      return0;/*“返回 零”
      也就是程序正常退出*/
}
輸出結果:
[5 plus 3 is 8] is a string 13 chars long


3、strstr()

從字符串str1中查找是否有字符串str2,如果有,從str1中的str2位置起,返回str1中str2起始位置的指針,如果沒有,返回null。

函數原型:extern char *strstr(char *str1, char *str2);
返回值:返回該位置的指針,如找不到,返回空指針。
charstr[]="1234 xyz";
char* str1=strstr(str,"34");
cout<<str1<<endl;
顯示: 34 xyz

4、itoa()

itoa是廣泛應用的非標準C語言擴展函數。由於它不是標準C語言函數,所以不能在所有的編譯器中使用。但是,大多數的編譯器(如Windows上的)通常在<stdlib.h>頭文件中包含這個函數。功能:將任意類型的數字轉換爲字符串。在<stdlib.h>中與之有相反功能的函數是atoi。

char*itoa(intvalue,char*string,intradix);
int value 被轉換的整數,char *string 轉換後儲存的字符數組,int radix 轉換進制數,如2,8,10,16 進制等
#include <stdlib.h>
#include <stdio.h>
intmain()
{
    intnumber = 123456;
    charstring[25];
    itoa(number, string, 10);
    printf("integer = %d string = %s\n", number, string);
    return0;
}

5、atoi()
6、C++的substr()(string 類型)

basic_string substr(size_type _Off = 0,size_type _Count = npos) const;
功能:從一個字符串複製一個從指定位置開始,並具有指定長度的子字符串。
#include <string>
#include <iostream>
usingnamespacestd;
intmain( )
{
    string str1 ("Heterological paradoxes are persistent.");
    cout << "The original string str1 is: " << endl;
    cout << str1 << endl;
    basic_string <char> str2 = str1.substr ( 6 , 7 );
    cout << "The substring str1 copied is: " << str2 << endl;
    basic_string <char> str3 = str1.substr ( );
    cout << "The default substring str3 is: " << endl;
    cout << str3 << endl;
    cout << "which is the entire original string." << endl;
    return0;
}
輸出結果:
The original string str1 is:
Heterological paradoxes are persistent.
The substring str1 copied is: logical
The default substring str3 is:
Heterological paradoxes are persistent.
which is the entire original string.

7、C++的append()(string 類型)

8、strcpy() / strncpy() /  strcat() / 

9、strtok
分解字符串爲一組字符串。s爲要分解的字符串,delim爲分隔符字符串。首次調用時,s指向要分解的字符串,之後再次調用要把s設成NULL。
原型:char *strtok(char s[], const char *delim);
功能:
分解字符串爲一組字符串。s爲要分解的字符串,delim爲分隔符字符串。
例如:strtok("abc,def,ghi",","),最後可以分割成爲abc def ghi.尤其在點分十進制的IP中提取應用較多。
返回值:
從s開頭開始的一個個被分割的串。當沒有被分割的串時則返回字符串首地址。
所有delim中包含的字符都會被濾掉,並將被濾掉的地方設爲一處分割的節點。
使用:
strtok函數會破壞被分解字符串的完整,調用前和調用後的s已經不一樣了。如果
要保持原字符串的完整,可以使用strchr和sscanf的組合等。
10、strchr
strchr函數原型:extern char *strchr(const char *s,char c);查找字符串s中首次出現字符c的位置。
const char *strchr(const char* _Str,int _Val)
char *strchr(char* _Str,int _Ch)
頭文件:#include <string.h>
功能:查找字符串s中首次出現字符c的位置
說明:返回首次出現c的位置的指針,返回的地址是字符串在內存中隨機分配的地址再加上你所搜索的字符在字符串位置,如果s中不存在c則返回NULL
返回值:Returns the address of the first occurrence of the character in the string if successful, or NULL otherwise


1、字符變量=cin.get()          與>>不同,get函數可以接受任何字符,包括空白字符
2、cin.getline(字符數組,數組長度,結束標記)   它從終端接受一個包含任意字符的字符串,直到遇到了指定的結束標記或到達了數組長度減1(因爲字符串最後一個字符必須是‘\0’,必須爲\0預留空間,結束標記符也可以不指定,此時默認回車爲結束標記)
3、字符處理函數頭文件<cstring> ------  這些都是針對char ch[]或char *ch
strcpy(dst,src)        將字符串從src複製到dst,函數的返回值是dst的地址  ======= strcpy(const char*,const char*)
strnpy(dst,src,n)      至多從src複製n個字符到dst,函數返回值爲dst的地址
strcat(dst,src)       將src拼接到dst後,返回dst的地址
strncat(dst,src,n)     從src至多取n個字符拼接到dst後,返回值是dst的地址
strlen(s)              返回字符串s的長度,即字符串中的字符個數 ========== strlen(const char*)
strcmp(s1,s2)          比較s1和s2,如果s1>s2返回整數,s1==s2返回0,s1<s2返回負數
strncmp(s1,s2,n)       與上面類似,但至多比較n個字符
strchr(s,ch)           返回一個指向s中第一個出現字符ch的地址
strrchr(s,ch)          返回一個指向s中最後一次出現字符ch的地址
strstr(s1,s2)          返回一個指向s1中第一次出現字符串s2的地址


char* ch 和char ch1[] 的長度都可以用strlen(ch|ch1)來求得,但長度不包括‘\0’了,不過sizeof(ch1)的結果就包括‘\0’了  strlen(const char*)


4、extern 可以調用別的文件中的全局變量,但如果此用static修飾的變量只能用於本源文件,不能用extern被別的源文件調用
5、const int *p=&x   :是一個指向的內容是常量的指針變量,由於使用了const說明指針指向的內容是一個常量,因而不能修改它指向的內容,如*p=30;就會報錯“左值是一個常量” ,但由於p是一個 普通的指針變量,我們可以讓指針指向另一個地址,列如p=&y
6、int  *const p=&x   :指針本身是一個常量,他固定指向某一變量,因此它本身的值不能變,但他指向的地址中的值是可變的 *p=30是對的,但p=&y是錯誤的

發佈了23 篇原創文章 · 獲贊 11 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章