CSharp学习笔记之三 C#中的字符串

原创 2013年12月04日 10:15:49

什么是字符串:

字符串是 String类型的对象,它的值是文本。在内部,文本被存储为Char对象的顺序只读集合。  C# 字符串末尾没有以 null 结尾的字符;因此 C# 字符串可以包含任意数目的嵌入式 null 字符(“\0”)。 字符串的 Length属性代表它包含的 Char 对象的数量,而不是 Unicode 字符的数量。 若要访问字符串中的各个 Unicode 码位,请使用 StringInfo 对象。

C#中的string和System.String的关系:

其实很多的时候我么你都会觉得string和System.String是不同,但是实际上,两个可以是一样,就像一个人的,有两个完全不同的两个名字一样,stirng其实就是Sytem.String的另外的一个别名而已。

C#中的string的定义和赋值:

string message1;

string message2 = null;

string message3 = System.String.Empty;

string oldPath = "c:\\Program Files\\Microsoft Visual Studio 8.0";

string newPath = @"c:\Program Files\Microsoft Visual Studio 9.0";

System.String greeting = "Hello World!";

var temp = "I'm still a strongly-typed System.String!";

const string message4 = "You can't get rid of me!";

char[] letters = { 'A', 'B', 'C' };
string alphabet = new string(letters);

关于string.Empty 和null的区别:

在C#中,string.Empty 所表示的意义就是 "",也就是说,双引号里面什么东西都没有,但是这并不表示这个字符串的没有定义,就像在C语言中所有的字符串的都是通过'\0'表示结束的,这里也是同样的道理。而对于null则不同。首先我们要知道string其实是一种引用类型没所谓的引用,其实就是在定义的时候个给一个地址,比如说:stirng str = "123",其实是将"123"的首地址给赋给了str,如果stri = null的话则表示,初始化时候的str的所引用的地址为空,并不是里面的值为空;

字符串的转义:

对于字符串的转义,下面给了一张字符串转义的表格:

字符串中常用额一些内置函数

   向string 的后面加字符或字符串。(比+=, push_back 更灵活)

(1)向string 的后面加C-string

basic_string& append( const value_type* _Ptr );

string s ( "Hello " ); // s=”Hello ”

const char *c = "Out There ";

s.append ( c ); // s=”Hello Out There”

(2)向string 的后面加C-string 的一部分

basic_string& append( const value_type* _Ptr, size_type _Count );

string s ( "Hello " ); // s=”Hello ”

const char *c = "Out There ";

s.append ( c , 3 ); // s=”Hello Out”

(3)向string 的后面加string(有两种方法)

basic_string& append( const basic_string& _Str );

string s1 ( "Hello " ), s2 ( "Wide " ), s3( "World " );

s1.append ( s2 ); // s1=”Hello Wide”

s1 += s3; // s1=”Hello Wide World”

(4)向string 的后面加string 的一部分 ---A

basic_string& append( const basic_string& _Str, size_type _Off,

size_type _Count );

string s1 ( "Hello " ), s2 ( "Wide World " );

s1.append ( s2 , 5 , 5 ); // s1=”Hello World”

(5)向string 的后面加string 的一部分 ---B

template<class InputIterator> basic_string& append(

InputIterator _First, InputIterator _Last );

string str1f ( "Hello " ), str2f ( "Wide World" );

str1f.append ( str2f.begin ( ) + 5 , str2f.end ( ) );

// s1=”Hello World”

(6)向string 的后面加多个字符

basic_string& append( size_type _Count, value_type _Ch );

string str1e ( "Hello " );

str1e.append ( 4 , '!' ); // s1=”Hello !!!!”

basic_string::assign

给string 赋值。 (比“=”更灵活)

(1)向string 赋C-string

basic_string& assign( const value_type* _Ptr );

string s;

const char *c = "Out There";

s.assign ( c ); // s=”Out There”

(2)向string 赋C-string 的一部分

basic_string& assign( const value_type* _Ptr, size_type _Count );

string s;

const char *c = "Out There";

s.assign ( c , 3 ); // s=”Out”

(3)向string 赋string(有两种方法)

basic_string& assign( const basic_string& _Str );

string s1 ( "Hello" ), s2 ( "Wide" ), s3( "World" );

s1.assign ( s2 ); // s1=”Wide”

s1 = s3; // s1=”World”

(4)向string 赋string 的一部分 ---A

basic_string& assign( const basic_string& _Str, size_type off,

size_type _Count );

string s1 ( "Hello " ), s2 ( "Wide World " );

s1.assign ( s2 , 5 , 5 ); // s1=”World”

(5)向string 赋string 的一部分 ---B

template<class InIt> basic_string& assign(

InputIterator _First,

InputIterator _Last );

string str1f ( "Hello " ), str2f ( "Wide World" );

str1f.assign ( str2f.begin ( ) + 5 , str2f.end ( ) ); // str1f=”World”

(6)向string 赋 多个字符

basic_string& assign( size_type _Count, value_type _Ch );

string str1e ( "Hello " );

str1e.assign ( 4 , '!' ); // s1=”!!!!”

basic_string::compare

如果所比较的两个string 相等,则返回0; 操作string 大于参数string,返回

正数;操作string 小于参数string,返回负数。

(1)比较操作string 与_Str 或C-string_Ptr

int compare( const basic_string& _Str ) const;

int compare( const value_type* _Ptr ) const;

int com = s.compare ( sp );

(2)比较操作string 中_Pos1(下标)开始的_Num1 个字符 与 string_Str

比较操作string 中_Pos1(下标)开始的_Num1 个字符 与 C-string _Ptr

比较操作string 中Pos1(下标)开始的Num1 个字符 与Str 中Off(下标)开始Count 个字

符

int compare( size_type _Pos1, size_type _Num1, const basic_string& _Str );

int compare( size_type _Pos1, size_type _Num1, const value_type* _Ptr ) const;

int compare( size_type _Pos1, size_type _Num1, const basic_string& _Str,

size_type _Off, size_type _Count );

int com1 = s.compare ( 2 , 3 , sp );

int com2 = s.compare ( 2 , 3 , c );

int com3 = s.compare ( 1 , 3 , cs , 3 ,1 );

basic_string::erase

删除string 中的一个或几个元素。前两个成员函数,返回要被删除的子串的下

一个元素的iterator; 第三个函数,返回删除后的string 的引用。

(1)删除string 中从_First 到_Last 的字符

iterator erase( iterator _First, iterator _Last );

basic_string <char>::iterator s_Iter;

s_Iter = s.erase ( s.begin ( ) + 3 , s.end ( ) - 1 ); // s_Iter=s.end( )

(2) 删除string 中_It 所指的字符

iterator erase( iterator _It );

s_Iter = s.erase ( s.begin ( ) + 5 );

(3) 删除string 中从_Pos(下标)开始的_Count 个字符

basic_string& erase( size_type _Pos = 0, size_type _Count = npos );

str = s.erase ( 6 , 8 ); // str 也是string

basic_string::find

寻找给定的string。返回找到的第一个string 下标值;如果没找到则返回npos。

(1)找一个character_Ch。(默认从头找)

size_type find( value_type _Ch, size_type _Off = 0 ) const;

string s ( "Hello Everyone" );

basic_string <char>::size_type index1, index2;

static const basic_string <char>::size_type npos = -1;

index1 = s.find ( "e" , 3 ); // index1=8,不是6

index2 = s.find ( "x" ); // index2=-1

if (indexCh1a != npos ) cout <<indexCh1a << endl;

else cout << "The character 'e' was not found in str1 ." << endl;

(2)找一个C-string。(默认从头找)

size_type find( const value_type* _Ptr, size_type _Off = 0 ) const;

string s ( "Let me make this perfectly clear." );

basic_string <char>::size_type index;

const char *c = "perfect";

index = s.find ( c , 5 ); // index=17

(3)找一个string。(默认从头找)

size_type find( const basic_string& _Str, size_type _Off = 0 ) const;

string s ( "clearly this perfectly unclear." );

basic_string <char>::size_type index;

string sta ( "clear" );

index = s.find ( sta , 5 ); // index=24

basic_string::max_size

返回string 能放的最大元素个数。(不同于capacity)

size_type max_size( ) const;

basic_string <char>::size_type cap, max;

cap = s.capacity ( );

max = s.max_size ( ); // max=4294967294.

basic_string::rfind

寻找给定的string。返回找到的第一个string 下标值;如果没找到则返回npos。

与find 不同的是:rfind 默认从npos 开始找。其他相同。

basic_string::replace

将原string 中的元素或子串替换。返回替换后的string。

(1)用string 或C-string 代替操作string 中从_Pos1 开始的_Num1 个字符

basic_string& replace( size_type _Pos1,size_type _Num1, const value_type* _Ptr);

basic_string& replace(size_type _Pos1,size_type _Num1,const basic_string_Str);

string a,b;

string s ( "AAAAAAAA" );

string s1p ( "BBB" );

const char* cs1p = "CCC";

a = s.replace ( 1 , 3 , s1p ); // s=”ABBBAAAA”

b = s.replace ( 5 , 3 , cs1p ); // s=”ABBBACCC”

(2)用string 中从_Pos2 开始的_Num2 个字符,代替操作string 中从_Pos1 开始的_Num1 个字符

用C-string 中的_Num2 个字符,代替操作string 中从_Pos1 开始的_Num1 个字符

basic_string& replace( size_type _Pos1, size_type _Num1, const basic_string& _Str,

size_type _Pos2, size_type );

basic_string& replace( size_type _Pos1, size_type _Num1,

const value_type* _Ptr, size_type _Num2 );

string a, b;

string s ( "AAAAAAAA" );

string s2p ( "BBB" );

const char* cs2p = "CCC";

a = s.replace ( 1 , 3 , s2p , 1 , 2 ); // s=”ABBAAAA”

b = s.replace ( 4 , 3 , cs2p , 1 ); // s=”ABBAC”

(3)用_Count 个character_Ch ,代替操作string 中从_Pos1 开始的_Num1 个字符

basic_string& replace( size_type _Pos1, size_type _Num1,

size_type_Count, value_type_Ch );

string result;

string s ( "AAAAAAAA" );

char ch = 'C';

result = s.replace ( 1 , 3 , 4 , ch ); // s=”ACCCCAAAA”

(4)用string 或C-string ,代替操作string 中从First0 到Last0 的字符

basic_string&replace(iterator First0,iterator Last0, const basic_string& _Str);

basic_string&replace(iterator First0,iterator _Last0, const value_type* _Ptr);

string s ( "AAAAAAAA" ); string s4p ( "BBB" );

const char* cs4p = "CCC";

basic_string<char>::iterator IterF0, IterL0;

IterF0 = s.begin ( ); IterL0 = s.begin ( ) + 3;

string a, b;

a = s.replace ( IterF0 , IterL0 , s4p ); // s=”BBBAAAAA”

b = s.replace ( IterF0 , IterL0 , cs4p ); // s=”CCCAAAAA”

(5)用string 中从_Pos2 开始的_Num2 个字符,代替操作string 中从First0 到Last0 的字符

用C-string 中的_Num2 个字符,代替操作string 中从First0 到Last0 的字符

basic_string& replace( iterator _First0, iterator _Last0,

const value_type* _Ptr, size_type _Num2 );

template<class InputIterator> basic_string& replace(

iterator _First0, iterator _Last0,

InputIterator _First, InputIterator _Last );

IterF3 = s.begin ( ) + 1; IterL3 = s.begin ( ) + 3;

IterF4 = s.begin ( ); IterL4 = s.begin ( ) + 2;

a = s.replace ( IterF3 , IterL3 , IterF4 , IterL4 );

b = s.replace ( IterF1 , IterL1 , cs5p , 4 );

(6)用_Count 个character_Ch ,代替操作string 中从First0 到Last0 的字符

basic_string& replace( iterator _First0, iterator _Last0,

size_type _Count , value_type _Ch );

a = s.replace ( IterF2 , IterL2 , 4 , ch );

basic_string::swap

交换两个string。

void swap( basic_string& _Str );

s1.swap ( s2 );

basic_string::substr

返回从_Off(下标)开始的_Count 个字符组成的string

basic_string substr( size_type _Off = 0, size_type _Count = npos ) const;

string s("I love you!"), sub;

sub=s.substr( ); // sub=”I love you!”

sub=s.substr(1); // sub=” love you!”

sub=s.substr(3,4); // sub=”ove ”

 

 

 

C#(C sharp)字符串和时间的相互转换

C#(C sharp)字符串和时间的相互转换。 一、DateTime –> string时间类型转化成字符串类型,那是相当的简单,直接调用ToString()方法即可。如:DateTime dt = ...

CSharp生成二维条码的步骤

一、Demo和控件下载 打开http://www.FzBozc.com/CSharp.html下载 客户端演示DEMO到本地,并进行解压打开。 DEMO采用VS2010开发,需要FrameWork4...

VB中Execute的用法

VB中Execute是指ADO命令之一:Execute 方法。 Execute 方法,执行在 CommandText 属性中指定的查询、SQL 语句或存储过程。 语法 对于按行返回的 C...

CSharp学习笔记之二 C#中的数组

所谓的数组就是具有相同的数据类型且按一定次序排列的一组变量的集合体,构成一个数组的这些变量称为数组元素。其实数组并不仅仅局限于存在在C#中,在C、C++、java等语言中也都存在着数组。 对于数组首先...

【CSharp 学习笔记】关于使用字符串作为索引值的索引器

今天在写一个有关Post的小程序的时候,因为每次Post都需要编辑一长串的Body,让我感觉到有些麻烦,这时候想到了某Json库中,实例化后能够使用字符串作为索引值,直观的进行读写。...

java学习笔记JDK6课件之三

  • 2008年07月01日 14:07
  • 452KB
  • 下载

CSharp学习笔记之七 异常处理

异常处理的概述: 在C#编程中,我们可以通过异常处理语句对异常进行处理。我们经常使用到的异常处理语句有throw语句、try…catch语句和try…catch…finally语句。 ...

CSharp学习笔记之九 多线程编程

今天就来学习一下C#中的线程和进程的问题吧 在C#中要操作线程就要借助Thread这个类来进行的一些操作的,首先要事例化一个thread的类,再在这个类的基础上进行操,在实例化Thread的实例,需...

《csharp高级编程》 学习笔记 第一章 .net 体系结构

第一章 .net 体系结构 几个概念: 1.Microsoft Intermediate Language,MSIL或简称IL。 2.Common Type System,CTS通用类型系统...
  • wuyanyi
  • wuyanyi
  • 2011年10月02日 00:13
  • 646

《csharp高级编程》 学习笔记 第五章 数组

第五章 数组 5.1  简单数组 5.1.1 数组的声明 int [] myArray; 5.1.2 数组的初始化 myArray=new int [4]; int[] m...
  • wuyanyi
  • wuyanyi
  • 2011年10月05日 20:20
  • 3359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CSharp学习笔记之三 C#中的字符串
举报原因:
原因补充:

(最多只允许输入30个字)