1. 程式人生 > >JAVA 和 C/C++ 中 string 的區別和注意點

JAVA 和 C/C++ 中 string 的區別和注意點

所有的字串類都起源於C語言的字串,而C語言字串則是字元的陣列。C語言中是沒有字串的,只有字元陣列。
      談一下C++的字串:C++提供兩種字串的表示:C風格的字串和標準C++引入的string型別。一般建議用string型別,但是實際情況中還是要使用老式C風格的字串。
      1.C風格的字串:C風格字串起源於C,並在C++中得到擴充套件。字串儲存在一個字元陣列中,例如:
       const char *str = “zhangdan”;(不要忘掉最後的\0)
       這裡用常量字元陣列來表示字串。操作字串的時候只要操作指標就可以了。如 :
       const char * str = "zhangdan";  const char *p = str; 然後對p進行操作就可以了。
       2.標準C++的string型別:如果用的話首先要引入標頭檔案:#include<string>
       在C++中提供的標準字串型別提供了以下操作:
      (1).支援用字元序列或者第二個字串去初始化一個字串物件。C風格的字串不支援用另外一個字串初始化另外一個字串。
      (2).支援字串之間的copy,C風格字串通過strcpy()函式來實現。
      (3).支援讀寫訪問單個字元。對於C風格的字串,只有解除引用或者通過下標操作才能訪問單個字元。
      (4).支援兩個字串相等比較,對於C風格的字串,比較是通過strcmp()函式來實現的。
      (5).支援兩個字串連線,對於C風格的字串用strcpy() 函式copy到一個新的例項中,然後用strcat()把兩個字串接起來。如:
       string str1 = "111111", str2 = "222222";
       string str3 = str1 + str2;
      (6).支援對字串長度的查詢:string s ("XXXXXXX"); str.size() 為字串的長度。
     相互轉換:const char * str = str2.c_str(); //不可把字串型別直接賦給字元陣列,但是可以吧一個字元陣列賦給一個字串型別:如:const char *str = "zhangdan"; string str2 = str;
    C++ string類的輸入
    (1)方法一:和C字串輸入的方法一相同。
    (2)方法二:使用getline函式。
    例如:string a;
   getline(cin,a);
   字串到數字的轉換
    atoi函式獲取一個C字串引數,返回對應的int值。如果引數不與一個int值對應,atoi就會返回0。atoi函式在檔案為cstdlib的庫中。如果數字太大,不能轉換成int型別的值,可以使用atol將字串轉換為long型別的值。
   例如:
    atoi("1234");   //返回整數1234
    atoi("#123");   //返回0
   C++中字串的常用方法就不一一介紹,介紹幾個常用的:begin(),end(),append(),等等。
  2:JAVA中的字串:在JAVA中,String不屬於8中基本型別,所以String是物件,預設值是null
 例如:String str = new String(); 和String str =  new String("");是一個意思,就是構造一個空字串,(理解null和""的區別)。
        看下面這段程式碼:
 

相關推薦

Java的IO操作關閉流的注意

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

javaString new直接賦值的區別

字符串相同 main 基礎 還需 賦值 請問 常量 int 表達 Java中String new和直接賦值的區別 對於字符串:其對象的引用都是存儲在棧中的,如果是編譯期已經創建好(直接用雙引號定義的)的就存儲在常量池中,如果是運行期(new出來的)才能確定的

JAVAstring.replace()string.replaceAll()的區別及用法

mod btn dsm ont match cep 產生 生成 語法 乍一看,字面上理解好像replace只替換第一個出現的字符(受javascript的影響),replaceall替換所有的字符,其實大不然,只是替換的用途不一樣。 public Strin

c語言宏定義常量定義的區別

沒有 int 符號表 cnblogs 格式 nbsp 參數 不同之處 區別   他們有共同的好處就是“一改全改,避免輸入錯誤”哪兩者有不同之處嗎?有的。   主要區別就在於,宏定義是在編譯之前進行的,而const是在編譯階段處理的 宏定義不占用內存單元而const定義的常量

c++ string const char * 的相同不同,遇到的坑。

#include<iostream> #include<string> using namespace std; string ToString(int i) { string str = std::to_string(i); return str; } int mai

c語言形參實參的區別

形式引數和實際引數 函式的引數分為形參和實參兩種。在本小節中,進一步介紹形參、實參的特點和兩者的關係。形參出現在函式定義中,在整個函式體內都可以使用,離開該函式則不能使用。實參出現在主調函式中,進入被調函式後,實參變數也不能使用。形參和實參的功能是作資料傳送。發生函式呼叫

去除C++string前面後面的空白符

#include <algorithm> #include <functional> #include <cctype> #include <locale> // trim from start static inline std::string <r

JavaString ,StringBufferStringBuilder的區別

  Java中的與字串操作相關的三個類String,StringBuffer和StringBuilder非常重要,特別做下總結。 String 字串常量   String 是不可變的物件, 因此在每次對 String 型別進行改變的時候其實都等同於生成了

C語言單引號雙引號的區別

拿0來舉例: 單引號是單個字元‘0’; 雙引號是字串“0”,包含0和結束符 , 即‘0’‘\0’ 組成的有一個字元0和結束符組成的字串。 雙引號裡面的是字串,代表的卻是一個指向無名陣列起始字元的指標,該陣列被雙引號之間的字元以及一個額外的二進位制值為零的字元‘\0’初始化

C語言的++aa++的區別

自增自減1、++自增運算子:如a++,++a都等價於a = a + 1;2、--自減運算子:如a--,--a都等價於 a = a -1; 雖然++a和a++等價的結果一樣,但是運算過程確大不相同,以下舉例說明: #include <stdio.h> int

const在CC++編譯區別(實現機制)

我們都知道在程式中用const,如果是變數,這表示該變數的值不能被修改,,,但是看下面一段C程式碼: 注意在用C編譯, #include <stdio.h> #include <stdlib.h> int main() { const i

C++建構函式,拷貝建構函式賦值函式的區別實現

C++中一般建立物件,拷貝或賦值的方式有建構函式,拷貝建構函式,賦值函式這三種方法。下面就詳細比較下三者之間的區別以及它們的具體實現 1.建構函式 建構函式是一種特殊的類成員函式,是當建立一個類的物件時,它被呼叫來對類的資料成員進行初始化和分配記憶體。(建構函式的命名必須

C語言的一個*[]優先級問題

pre 執行 return ges spa 技術 分享 malloc bsp 最近寫著玩了這麽一段代碼 1 int Init(int **T, int v1, int v2, int v3) 2 { 3 4 if (!(*T=(int*) malloc(3*

C# List<string>ArrayList用指定的分隔符分隔成字符串

light arp 字符串 元素 logs arraylist pre brush type 原文地址:https://www.cnblogs.com/ahwwmb/p/4166707.html 串聯字符串數組的所有元素,其中在每個元素之間使用指定的分隔符

Java多執行緒Synchronized簡介Static Synchronized的區別

在進行Java開發時,多執行緒的開發是經常會使用的。首先會問一個小問題啊,在Java中有幾種方法可以建立一個執行緒? 我給的答案是3種。(如果還有其他的請留言告訴我哈。) 1、建立直接繼承自Thread類建立執行緒子類。   步驟如下:a 定義一個子類,同時

c語言指標陣列陣列指標的認識

1.陣列:一批具有同名的同屬性的資料就組成了一個數組。(“[ ]”也是陣列型別的一部分)     由此可知:(1)陣列是一組有序資料的集合;(2)陣列中的每一個元素都屬於同一個資料型別。  定義一維陣列的一般形式:型別符  陣列名【常量表達式】(陣列也

C++模板的省略號可變引數模板

#include <iostream> using namespace std; void print() { cout << "hello world" << endl; } template<class T> voi

C語言巨集定義函式的取捨

原文連結:http://www.embedu.org/Column/Column177.htm 要寫好C語言,漂亮的巨集定義是非常重要的。巨集定義可以幫助我們防止出錯,提高程式碼的可移植性和可讀性等。 在軟體開發過程中,經常有一些常用或者通用的功能或者程式碼段,這些功能既可以寫成函式,也可以

c語言的 strcpystrncpy字串函式使用介紹

1.strcpy函式 函式原型:char *strcpy(char *dst,char const *src)            必須保證dst字元的空間足以儲存src字元,否則多餘的字元仍然被複制,覆蓋原先儲存在陣列後面的記憶體空間的數值,strcpy無法判斷這個問題因為他無法判斷字元陣列的長度。

《隨筆四》——C#的 “屬性索引器的 get set 訪問器的訪問修飾符”

屬性和索引器中的 get 和 set 訪問器的訪問修飾符 ●  索引器和屬性自帶 get 和 set 訪問器,  在預設的情況下:  如果一個屬性有public 訪問級別, 那麼它的那個兩個訪問器