奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語言

C語言字符串

時間:2025-03-31 09:48:33 C語言 我要投稿

C語言字符串

  在標準C中,是沒有字符串變量的,但是有字符數組。而且標準C帶有的標準庫函數:string.h中包含了大量的字符串操作函數,當然如果必要的話,你也可以自己寫代碼實現這些函數的功能。以下是小編為大家搜索整理的C語言字符串,希望能給大家帶來幫助!

  對于32位操作系統

  int (2字節) short (1字節) long(4字節)

  unsigned char 從0到256之間

  char 從-128到127之間

  byte 字節就是無符號的字符

  unicode:兩字節的字符

  由此可見:byte=nusigned char, short=char

  char* :是指向ANSI字符數組的指針,其中每個字符占據8位(有效數據是除掉最高位的其他7位),這里保持了與傳統的C,C++的兼容。

  TCHAR: 在采用Unicode方式編譯時是wchar_t,在普通時編譯成char. 如果定義_UNICODE,聲明如 :typedef wchar_t TCHAR; 如果沒有定義_UNICODE,則聲明如:typedef char TCHAR;

  LPSTR: 是一個指向以‘’結尾的ANSI字符數組的指針,與char*可以互換使用,在win32中較多地使用LPSTR。

  LPTSTR和LPCTSTR:中的含義就是每個字符是這樣的TCHAR。

  LPWSTR與LPCWSTR:類似于LPSTR與LPCSTR,只是字符數據是16位的wchar_t而不是char。

  LPCSTR: 增加的‘C’的含義是“CONSTANT”(常量),表明這種數據類型的實例不能被使用它的API函數改變,除此之外,它與LPSTR是等同的。

  LPCTSTR:

  #ifdef _UNICODE

  typedef const wchar_t * LPCTSTR;

  #else

  typedef const char * LPCTSTR;

  #endif

  CString類, 是由微軟公司集成在VC的MFC里面,包含字符串各種常見操作的類。其源碼可以在MFC里面找到。

  當聲明一個字符串變量,首先會調用構造函數,在成功后,便可利用它的常見操作。

  CString 是一個完全獨立的類,動態的TCHAR數組,封裝了 + 等操作符和字符串操作方法。

  1、ANSI(即MBCS):為多字節字符集,它是不定長表示世界文字的編碼方式。

  2、Unicode:用兩個字節表示一個字符的編碼方式。

  MBCS宏對應的字符串指針為LPSTR,Unicode對應的指針為LPWSTR。LPSTR被定義成是一個指向以NULL(‘’)結尾的8位ANSI字符數組指針,而LPWSTR是一個指向以NULL結尾的16位雙字節字符數組指針。

  為了寫程序的方便,微軟定義了類型LPTSTR,在MBCS下它表示LPSTR,在Unicode下它表示LPWSTR,這就可以重定義一個宏進行不同字符集的轉換了。

  LP STR:指向一個字符串的32位指針,每個字符占1個字節。

  LPC STR:指向一個常量字符串的32位指針,每個字符占1個字節。

  LP TSTR:指向一個字符串的32位指針,每個字符可能占1個字節或2個字節。

  LPC TSTR:指向一個常量字符串的32位指針,每個字符可能占1個字節或2個字節。

  強制轉換為UNICODE,應該是L。字符串(literal string)前面的大寫字母L,用于告訴編譯器該字符串應該作為U n i c o d e字符

  串來編譯。當編譯器將字符串置于程序的數據部分中時,它在每個字符之間分散插入零字節。

  #ifdef _UNICODE

  #define _T L

  #else

  #define _T

  #endif

  These data-type mappings are defined in TCHAR.H and depend on whether the constant _UNICODE or _MBCS has been defined in your program.

  當我們在利用CString 類便捷性時,有些特殊化的東西無法做,于是相互之間的轉換變經常被需要:

  在轉換之前必須確保你的字符的范圍在你的范圍之內。

  1.CStirng轉 char *

  傳給未分配內存的指針.

  CString cstr1="ABCD";

  char * ch=cstr1.GetBuffer(cstr1.GetLength()+1); //獲取指向CString最后一個字符的地址。

  cstr1.ReleaseBuffer();

  注意:用完ch后,不用 ch,因為這樣會破壞cstr內部空間,容易造成程序崩潰.

  GetBuffer :這個函數是為一個CString對象重新獲取其內部字符緩沖區的指針,返回的LPTSTR為非const的,從而允許直接修改CString中的內容! 如果nMinBufLength 比當前buffer大,那么就調用ReleaseBuffer函數去釋放當前的Buffer,用一個被請求的大小去覆蓋這個buffer.

  而GetBuffer則是返回一個可以供調用者寫入的內存,并且,你可以給定大小。其實它就相當于申請一塊nLen大小的內存,只不過,這塊內存是被引用在CString對象的內部而已,這是非常有效的一種用法,如果不直接用GetBuffer函數來申請的話,那么你必須用new操作符(或者 malloc()函數)在CString的外部申請,然后再將申請的內存拷貝到CString對象中,顯然這是一個非常冗余的操作,會使你函數的效率大大下降。

  ReleaseBuffer函數是用來告訴CString對象,你的GetBuffer所引用的內存已經使用完畢,現在必須對它進行封口,否則 CString將不會知道它現在所包含的字符串的長度,所以在使用完GetBuffer之后,必須立即調用ReleaseBuffer函數重置 CString的內部屬性,其實也就是頭部信息。

  值賦給已分配內存的char *

  CString cstr1 = "ASDDSD";

  int strLength = cstr1.GetLength() + 1;

  char *pValue = new char[strLength];

  strncpy(pValue, cstr1, strLength);

  賦值:

  char* psz = “joise”; 沒有構造函數,僅可以賦值(因為它本身就是基本型)

  CString cstr( psz ); 可以從基本的一些字符串變量構造而來,包括char*等

  string str( cstr ); 可以從幾乎所有的字符串構造而來,包括CString和char*;

  以上也可以看作由 char *轉CStirng的辦法。

  1.char *:

  char *psz = NULL;

  psz = new char[10]; //當然,以上的直接寫成char *psz = new char[10];也是一樣

  memset( psz, 0, 10 );

  strcpy( psz, “joise” );

  2.CString:

  CString cstr;

  cstr = psz; 字符指針直接賦值

  3.string:

  string str;

  str = psz; 字符指針直接賦值

  str = cstr; CString變量直接賦值

  []psz;

  加運算

  string與CString差不多,可以直接與char*進行加法,但不可以相互使用+運算符

  char*沒有+運算,只能使用strcat把兩個指針連在一起;

  strcat( psz, cstr );//合法

  strcat( psz, str );//非法,由此可見,CString可自動轉換為const char*,而string不行

  []運算

  CString最好,當越界時會拋出斷言異常;

  string與char*下標越界結果未定義;

  拓展:C語言字符串快速壓縮算法代碼

  通過鍵盤輸入一串小寫字母(a~z)組成的字符串。

  請編寫一個字符串壓縮程序,將字符串中連續出席的重復字母進行壓縮,并輸出壓縮后的字符串。

  壓縮規則:

  1、僅壓縮連續重復出現的字符。比如字符串”abcbc”由于無連續重復字符,壓縮后的字符串還是”abcbc”。

  2、壓縮字段的格式為”字符重復的次數+字符”。例如:字符串”xxxyyyyyyz”壓縮后就成為”3x6yz”。

  示例

  輸入:“cccddecc” 輸出:“3c2de2c”

  輸入:“adef” 輸出:“adef”

  輸入:“pppppppp” 輸出:“8p”

  主要說來就是進行字符串處理類的問題,主要涉及到:

  1.字符串的輸入與輸出;

  2.基本常用的C語言的字符串的函數使用;

  3.對于多重情況的考慮;

  4.將數字轉換成字符串并進行拼接;

  復制代碼 代碼如下:

  #include

  #include

  #include

  int main()

  {

  char str[100] = {'};

  char res[100] = {'};

  scanf("%s",str);

  int length = strlen(str);

  int i=0, j=0, k=0;

  int count = 0;

  do

  {

  if(i < length && str[i++] == str[j])

  count++;

  if(str[i] != str[j])

  {

  if(count <= 1)

  res[k++] = str[j];

  else

  {

  if(count > 1)

  {

  char temp[10] = {'};

  itoa(count,temp,10);

  strcpy(res+k,temp);

  k+=strlen(temp);

  res[k++] = str[j];

  }

  }

  j = i;

  count = 0;

  }

  }while(i<length);

  res[k] = ';

  printf("The result is : %sn",res);

  return 0;

  }

【C語言字符串】相關文章:

C語言字符串操作01-29

C語言字符串處理函數03-01

C語言字符串操作講解08-03

C語言字符串知識點07-27

C語言之字符串處理函數03-12

C語言中壓縮字符串的算法07-27

C語言字符數組和字符串05-05

C語言的字符串處理函數strlen()04-27

C語言的字符串輸出puts()函數06-23

主站蜘蛛池模板: 根河市| 康保县| 昔阳县| 佛学| 元阳县| 慈溪市| 昂仁县| 化州市| 菏泽市| 二手房| 卫辉市| 玛曲县| 镇沅| 永定县| 平塘县| 芷江| 漳平市| 那坡县| 贺兰县| 锡林浩特市| 林甸县| 项城市| 大悟县| 赣州市| 邹城市| 凯里市| 墨竹工卡县| 大荔县| 大足县| 通渭县| 贡山| 深泽县| 沁源县| 广宗县| 麟游县| 璧山县| 安丘市| 阿巴嘎旗| 镇赉县| 陵川县| 色达县|