string系列操作1

Delphi string、char数组和Pchar

Pchar:是指针,占4B,定义时指向随即地址,由#0表示字符串结尾。
Pchar指向内存,只是代表一个地址,可随意指向任何东西。

Char数组:长度和地址比较固定。SetLength,地址不可被赋值。

string:分两种,内可包含#0。
ShortString:最长256字节
AnsiString:最长256的4次方

String-->PChar:只是讲String中字符串的地址复制给了Pchar。

Pchar和char数组,占内存少,速度快,效率高

转换:

1、将指针型数据转换为字符串:
function StrPas(const Str: PChar): string;
eg:
var
mystr:array[0..20] of char;
begin
mystr:=‘我的程序‘;
showmessage(strpas(@mystr));
end;
注意:指向字符串的指针,如果不是以0结尾,运行时会出现错误:
{s[0]=3 s[1]=‘n‘ s[2]=‘e‘ s[3]=‘w‘}
var
  s:string;
p:pchar;
begin
 s:=‘new‘;
label1.caption:=s; {new}
 label2.caption:=intTostr(integer(s[0]));{3是字符串的长度}
 p:[email protected][1];{不是以0结尾,莫用pchar型指针}
label3.caption:=strpas(p); {运行时出现错误}
end;
例2:在字符串结尾人工加入0即char(0),可使用指向字符串的指针。
  {s[0]=4 s[1]=‘n‘ s[2]=‘e‘ s[3]=‘w‘ s[4]=0;}
var
s:string;
p:pchar;
begin
 p:[email protected][1];
 s:=‘new‘+char(0); {以0结尾,可用pchar型指针}
 label1.caption:=strpas(p); {new}
end;

2、将string转化为PChar或数组:
function StrPCopy(Dest: PChar; const Source: string): PChar

3、procedure GetMem(var P:pointer;Size:integer);

时间: 2024-10-28 16:11:44

string系列操作1的相关文章

string系列操作

一.Move操作 <1> var pSource,pDest:PChar; len: integer; .......................//一些代码 Move(pSource,pDest,len); //错误 Move(pSource^,pDest^,len); //正确,根据Move函数:  S := PChar(@Source);也可以这样 <2> var a1,a2:array of char; ......  SetLength(a1,len);  SetLe

使用 redis (基础, key操作, string类型操作)

使用redis set 类型: 没有重复元素 list 链表类型 有重复累型 sort set 类型 没有重复元素 1.1 存储数据 读取数据 // 数据储存在 内存中 set name laowen // OK 表示成功 set age 22    // ok 表示成功 set add beijing // OK 表示成功 get name // "laowen" 表示获取成功 get age // "22" 表示获取成功 get addr // "be

String字符串操作

char chars[] ={'a','b','c'}; String s = new String(chars); int len = s.length();//字符串长度 System.out.println(chars);//ab System.out.println(s);//abc System.out.println(len);//3 char ch = "zhangpei".charAt(5);下标从0开始 System.out.println(ch);//p Strin

string的+操作与StringBuilder对象

习惯在C#代码中写str+="xxx";这样代码的请注意啦,如果这种操作是针对单个变量作很多次叠加操作的,很有可能导致性能降低. 大家都知道string与StringBuilder的区别,这里就不说了,来看看例子,震撼一下: 分别是测试普通字符串进行5w次叠加操作 vs StringBuilder进行5w次Append操作: 可以看到,普通string操作是花了67秒(我双核CPU).StringBuilder是0.04秒.... 再看看对于string是否会被回收方面的测试,由图中也

string系列函数实现

;string系列函数 int main(int argc, char* argv[]){ char str1[100]="hello"; char str2[100]="helloChina"; char str3[100]="heool"; //int len=myStrLen((char *)&str1); //myStrCpy((char *)&str2,(char *)&str1); //myStrCat((ch

string常用操作

十四.string常用操作 set key1 szk  #给key1赋值为szk get key1    #获取这个值value set key1 yc  #一个key对应一个value,多次赋值,会覆盖前面的value setex key3 10 1   #用来给key设定过期时间10秒 ttl key3查看时间 mset key1 1 key2 2 key3 3    #同时设置多个key mget key1 key2 key3 1) "1"2) "2" 3)

string 类操作的重载实现及其提供的其他常用成员函数

目录 1,string 类操作的重载实现 2,String类提供的其他常用成员函数 @ 1,string 类操作的重载实现 /* string 类操作的重载实现 */ class CMyString { public: CMyString(char *ptr = NULL) { if (ptr == NULL) { mpStr = new char[1]; *mpStr = '\0'; } else { mpStr = new char[strlen(ptr) + 1]; strcpy(mpSt

实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)

string.vector 互转 string 转 vector vector  vcBuf;string        stBuf("Hello DaMao!!!");----------------------------------------------vcBuf.resize(stBuf.size());vcBuf.assign(stBuf.begin(), stBuf.end()); vector 转 string  stBuf.clear();stBuf.assign(v

实战c++中的string系列--string的替换、查找(一些与路径相关的操作)

今天继续写一些string操作. string给我们提供了很多的方法,但是每在使用的时候,就要费些周折. 场景1: 得到一个std::string full_path = "D:\program files\csdn",但是我想得到"D:\program files\vagaa"这个路径. 这就需要字符串的替换 std::string full_path = "D:\\program files\\csdn" const size_t last_