程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++語言基礎-字串操作函數

C++語言基礎-字串操作函數

編輯:關於C++

如果你用過具有string數據類型的編程語言,你可能很不習慣,別人也有同感,所以標准C語言庫中提供了幾個字串操作函數。表1.3列出了最常用的字串操作函數及其用法說明。關於每個函數的詳細說明和實例,見C++ Builder聯機幫助。
表1.3字串操作函數
函數 說明
strcat() 將字串接合到目標字串的末尾
strcmp() 比較兩個字串是否相等
strcmpi() 比較兩個字串是否相等,不考慮大小寫
strcpy() 將字串內容復制到目標字串中
strstr() 掃描字串中第一個出現的字串
strlen() 返回字串長度
strupr() 將字串中的所有字符變成大寫
sprintf() 根據幾個參數建立字串
說明 這裡介紹的字串操作是C語言中的字串處理方法。大多數C++編譯器提供了cstring類,可以簡化字串的處理(C++ Builder的Visual構件庫中有個AnsiString類,可以處理字串操作。C++ Builder聯機幫助中詳細介紹了AnsiString類)。盡管C語言中的字串處理方法比較麻煩,但並不過時,C++編程人員經常在使用cstring類和AnsiString類等字串類的同時使用C語言中的字串處理方法。這裡不想對表中的每個函數進行舉例說明,只想舉兩個最常用的函數。strcpy()函數將一個字串復制到另一字串中,源字串可以是變量或直接字串。例如下列代碼:
//set up a string to hold 29 characters
char buff[30];
//copy a string literal to the buffer
strcpy (buff,"This is a test.");//display it
cout << buff << end;
//initialize a second string buffer
char buff2[]="A second string.";
//copy the contents of this string to the first buffer
strcpy (buff,buff2);
cout << buff << end1;
字符數組中比數字數組中更容易重載數字末尾。例如下列代碼:
char buff[10]= "A string";// later....
strcpy(buff,"This is a test."); //oops!
這裡建立了放10個字符的字符數組,最初指定需要9個字節的字符串(記住終止null)。後來可能忘記了數組長度,將需要16個字節的字串復制到了緩沖區,對數組重載了六個字節。這個小小錯誤就擦去了某個內存位置上的六個字節。所以將數據復制到字符數組中時要特別小心。另一個常用的字串函數是sprintf()。這個函數可以混合文本和數字建立格式化字串。下面例子將兩個數相加,然後用sprintf()建立字串以報告結果:
char buff[20];
int x = 10 * 20;
sprintf(buff,"The result is: %d",x);
cout << buff;
執行這個碼段時,程序顯示下列結果:The result is:200
本例中%d告訴sprintf()函數此處有個整型值,格式字串末尾插入變量x,告訴sprintf()在字串的這個位置放上變量x的值。sprintf()是個特別的函數,可以取多個變元。你必須提供目標緩沖區和格式字串,但格式字串後面的變元數是個變量。下面的sprintf()例子用了另外三個變元:
int x = 20;
int y = 5;
sprintf(buff, "%d + %d", x, y, x + y);
cout << buff;
執行這個碼段時,屏幕上顯示的結果如下:20 + 5 = 25
說明 C++字串中的單斜槓表示特殊字符。例如,'\n'表示新行符,'\t'表示跳表符。為了在字串中放上實際的斜槓,要用雙斜槓如下:
strcpy(fileName, "c:\\windows\\system\\win.ini");
許多編程人員因為忘了這個簡單的事實而夜不能寐,苦苦折騰。這是個常見的錯誤,別說我沒有告訴你。sprintf()有個兄弟叫wsprintf(),是Windows版的sprintf().Windows程序中可能同時用這兩個函數。wsprintf()與sprintf()的作用相似,唯一的差別是不能在格式字串中放上浮點數。C++ Builder程序中兩個函數均可使用,但用sprintf()更好,因為它完全支持浮點數(還可以少輸入一個字符)。關於sprintf()的進一步介紹,見C++ Builder聯機幫助。

字串數組不僅可以有字符數組,還可以有字符數組的數組(即字串數組)。這聽起來有點復雜,其實前面的Argstest程序中已經用過。這類數組可以分配如下:
char strings[][20] = {
"This is string 1",
"This is string 2",
"This is string 3",
"This is string 4"};
這個代碼生成四個字串的數組,每個字串最多放19個字符。盡管可以使用這種字串數組,但C++ Builder中還有更簡單的字串數組處理辦法(將在後面介紹C++ Builder時介紹)。說明 如果經常用到字串數組,應當看看標准模板庫(STL).STL提供了比用C語言式字符數組更方便地存放和操作字串數組的方法.STL中還有個string類。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved