精华内容
下载资源
问答
  • 字符串的存储方式

    千次阅读 2016-05-19 10:49:18
    字符串的存储方式 顺序存储 紧缩格式 一个字放四个字符=32位二进制 长度=(n/4)-1 非紧缩格式 一个字存放一个字符 链式存储(非顺序存储) 结点大小为1的链串 结点大小为4的链串 模式匹配算法 设字符串s、p,在s...

    字符串的存储方式

    顺序存储

    紧缩格式

    一个字放四个字符=32位二进制

    长度=(n/4)-1

    非紧缩格式

    一个字存放一个字符

    链式存储(非顺序存储)

    结点大小为1的链串

    结点大小为4的链串


    模式匹配算法

    设字符串s、p,在s中匹配p中的字符串

    //pat 一个字符串类

    //一个成员指向数组的首地址

    //一个成员为字符串的长度

    char *p = pat.str;

    char *s = pat.sty;

    int i = 0 ;

    while (i <=size -pat.size)//size值主串的长度,pat.是模式串的长度

    {

    while (*p++ == *s++) // *p  是字符串中的值  运算符级别相同 从右开始运算

    //先使用在+1

    if (*p == \0)

    returen i;

    i++;

    p = pat.str ;

    s = str + i ;

    }

    return - 1;








    展开全文
  • 详细对比Java字符串的存储方式

    千次阅读 2019-11-28 18:47:27
    详细对比Java字符串的存储方式 字符串: String name = "hello"; 变量名name存储在jvm栈,值"hello"存储在堆中的常量池中 字符串对象: String name2 = new String("hello"); 变量名name2存储在jvm栈,值"hello...

    详细对比Java字符串的存储方式

    结论:

    • 字符串常量存储在堆的常量池中,字符串对象存储在堆的非常量池中
    • 除了字符串对象之外,其他字符串都存储在常量池中。
    • 字符串对象相加产生另一个字符串对象。

    字符串:

    String name = "hello";
    

    变量名name存储在jvm栈,值"hello"存储在堆中的常量池中

    字符串对象:

    String name2 = new String("hello");
    

    变量名name2存储在jvm栈,值"hello"存储在堆的非常量池中,并且每个new出来的String对象的地址都是不同的

    使用代码查看他们的地址是否相同:

    String str1 = "abc";
    String str2 = new String("abc");
    System.out.println("常量与对象:" + str1 == str2);
    
    //false
    

    不过,可以把字符串对象的值从堆中挪到常量池中:

    str2 = str2.intern();
    System.out.println("字符串与intern后的字符串对象:" + (str1 == str2));
    
    //true
    

    其他字符串产生方式:

    还有各种其他方式产生的字符串:

    字符串常量(final)、静态字符串(static)、字符串相加、字符串对象相加、未引用的字符串、方法中的字符串等

    final String str3 = "abc";
    System.out.println("字符串与字符串常量:" + (str1 == str3));
    
    //true
    
    System.out.println("未引用字符串相加与常量:" + ("ab" + "c" == str3));
    
    //true
    
    System.out.println("未引用字符串与字符串常量:" + ("abc" == str3));
    
    //true
    
    System.out.println("未引用字符串与引用字符串:" + ("abc" == str1));
    
    //true
    
    static final String str4 = "abc";	//类中定义
    
    System.out.println("未引用字符串与静态字符串:" + ("abc" == str4));	//main中对比
    
    //true
    
    void returnAbc(){
    	String str5 = "abc";
    	System.out.println("方法中的字符串与静态字符串:" + (str5 == str4));
    }
    

    还有个特殊的,字符串对象相加:

    String ab = new String("ab");
    String c = new String("c");
    String abc = ab + c;
    System.out.println("对象相加与字符串:" + (abc == str1));
    System.out.println("对象相加与对象:" + (abc == str2));
    
    //false
    //false
    

    可以看到,相加之后的对象与在常量池中的str1地址不同,所以他也是个字符串对象。

    前面说到,字符串对象的地址都是不同的,因此跟另一个字符串对象str2对比结果也是false。

    如果让相加产生的字符串对象也调用intern方法,再与intern后的str2对比:

    abc = abc.intern();
    System.out.println("intern后的两个对象:" + (str2 == abc));
    
    //true
    

    得出结论:

    字符串常量存储在堆的常量池中,字符串对象存储在堆的非常量池中

    除了字符串对象之外,其他字符串都存储在常量池中。

    字符串对象相加产生另一个字符串对象。

    结果图:
    在这里插入图片描述

    展开全文
  • 数值在计算机中是以二进制的形式存储的。 字符和字符串是先编码后再转化为二进制的形式存储,编码方式如(ASCII码,...字符整数在内存中的存储 在内存中只是存储了2和5的ASCII码的值 打印出a和b的值查表得知是2和5的A

    数值在计算机中是以二进制的形式存储的。

    字符和字符串是先编码后再转化为二进制的形式存储,编码方式如(ASCII码,UTF8)。

    例如,char x=‘a’,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。

    C中字符表示用单引号,字符串表示用双引号,字符串是一段连续的字符。

    一、字符

    字符之间的相减就是ASCII码之间的相减

    在这里插入图片描述
    在这里插入图片描述

    字符整数在内存中的存储

    在这里插入图片描述
    在内存中只是存储了2和5的ASCII码的值
    在这里插入图片描述
    打印出a和b的值查表得知是2和5的ASCII码的值
    为什么呢??

    二、字符串

    C语言中没有表示字符串类型的数据结构,但是C++用string表示字符串的数据类型。
    想要表示字符串用指针或数组。

    char *q="abcd";
    char a[] = "hello";
    

    这种定义是错误的,char类型只能表示字符。
    在这里插入图片描述

    指针表示字符串

    在这里插入图片描述
    p和q都是一个指针(在x86编译下一个指针4字节),指向了字符串的首地址
    不管p,q字符串里有多个字符,指针p,q的大小依旧是4字节

    字符串在内存的存储

    在这里插入图片描述
    在这里插入图片描述
    上图的p-q只是两个指针里面存放的地址数之间的相减(即串abc的地址与串abcd的地址之间相差多少)

    abcd存储时为什么是61 62 63 64(16进制显示)

    存进去字符串abcd,刚好对应16进制的abcd
    在这里插入图片描述

    数组表示字符串

    在这里插入图片描述
    但还是计入串长,在数据结构中是不计入串长的
    在这里插入图片描述

    展开全文
  • 关于字符串的存储和输出问题 作者:张老师,华清远见嵌入式学院讲师。 关于字符串的存储和输出问题: 在C语言里并没有字符串类型。所以的字符串都当做一个一个的字符来处理,正是因为没有字符串数据类型,所以我们...

    关于字符串的存储和输出问题

    作者:张老师,华清远见嵌入式学院讲师。

    关于字符串的存储和输出问题:

    在C语言里并没有字符串类型。所以的字符串都当做一个一个的字符来处理,正是因为没有字符串数据类型,所以我们必须字符串的最后加入字符’\0’,来标记字符串的结束。

    字符串有三种存储方式:

    •  通过字符数组存储。此时的存储空间是可读写的,这样字符串就有被修改的可能性。在定义字符数组时可用通过字符串来赋值,通常要求字符数组长度比字符串至少多一个字符。 后面则只能通过数组下标或者指针的方式来修改字符数组,也就是修改字符串的内容。这种方式下存储字符串分配的数组空间至少等于字符串的长度加一个字节的字符’\0’。

    •  常量区存储 。此时的字符串存储空间是只读,字符串不可修改。我们只能通过定义一个只能变量记录该空间的首地址。此时的存储字符串分配常量空间为字符串长度加一个字节的字符’\0’,这样更节省内存空间。但是我们还需要额外定义一个指针变量指向字符串的首地址,来访问字符串。

    •  堆内存储。堆内存储需要手动分配对内存,此时的存储空间一样是可读写的。同样字符串就有被修改的可能性。这种方式下存储字符串分配的堆空间至少等于字符串的长度加一个字节的字符’\0’。还需要额外定义一个指针变量指向字符串的首地址,来访问字符串。

    字符串的输出方式:

    对于字符串的输入最常见使用%s格式输出,我们只需要传递字符串的首地址即可。一直输出字符到遇见字符’\0’,则表示字符串输入结束。也可以通过%c,循环输出一个字符。但是我们如何获得字符串的长度呢,这里一样需要字符’\0’。这也是为什么在处理字符串的时候必须在字符串结尾追加字符’\0’

    展开全文
  • C语言之字符串的存储和表示@TOC 逐个字符输入输出字符串 在C语言中字符串是保存在数组中的,因此在输入一串字符的时候我们需要先定义一个数组。 #define STR_LEN 80 char str[STR_LEN+1]; 一般我们习惯将宏定义...
  • Java字符串的存储方式

    千次阅读 2018-12-28 05:24:51
    Java堆中存储的就是普通的字符串对象。 那么如何判断字符串到底位于哪一个区域呢? 有以下几种情形。 情形一 String s="123"; 复制代码  虚拟机在处理字面量"123"时,首先在本地栈中创建字符串"1...
  • C语言中字符串的存储方法

    万次阅读 2018-05-10 19:12:00
    众所周知,C语言中没有数据类型能够存储字符串,char数据类型仅仅能够存储一个字符数据,那么在C语言中关于存储字符串这一难题我们改何去何从呢?下面将详述相关的字符串存储方法;1、使用字符数组存;?...
  • c语言中字符串的存储方式。

    千次阅读 2019-05-20 11:11:42
    所以c语言使用两种方式来存储字符串。char*和char[], char*a="123456";右面123456是字符串常量,所谓常量就是这个值是保存在内存中的字符串常量区。每个字符串后面都有系统预设结束符"\0", char a[ ]="123456...
  • i. 定义具有两个私有数据成员,分别表示字符串的存储地址(char*类型)和长度(int类型)。实现字符串类String的构造函数、析构函数、拷贝构造函数、赋值运算。 ii. 实现运算符重载:String + String、String + char * ...
  • java中字符串的存储

    千次阅读 2018-01-02 13:11:17
    在java中,不同的字符串赋值方法,其所在的地址可能不同也就导致,两个字符串的值看似相等可是在s1==s2操作时,其结果返回的却是false 例: String s1 = "Programming"; String s2 = new String("Programming"); ...
  •  字符串的存储与加载是指,将字符串的值加载到寄存器和将其传回内存位置中。其使用指令lods指令和stos指令。  lods指令用于把内存中的字符串值传送到eax寄存器中,该指令有三种不同格式:lodsb(1字节)、lodsw(2...
  • 转自http://blog.csdn.net/yangdelong/archive/2010/04/03/5447362.aspx<br />文章来源 http://blog.csdn.net/shiwei0124/archive/2009/11/26/4877546.aspx<br />字符串的存储方式以及静态存储区域、栈、堆 在...
  • C++string类型字符串的存储方式

    千次阅读 2013-06-05 13:04:30
    不知道你们有没有看过string类型变量的成员数据,在string变量中好像真正存储字符串的是一个叫_Ptr的指针,它指向string所存储的字符串首地址。当string变量被定义时,如果未初始化,_Ptr就是一个指向NULL的指针,...
  • Java 判断字符串的存储长度

    千次阅读 2016-03-11 14:56:21
    判断前台输入项长度应该都会碰到String.length() 判断出来没有超出最大长度,存到数据库就超出长度问题,oracle字符集是gbk不太清楚,如果是UTF-8,中文是占三个字符的,所以要对中文进行特别判断。...
  • 自己写特殊拆分函数如下: ​create or replace function FN_SPLIT_STR_2(var_str in varchar2)...现在需要一个存储过程,将所有记录c3字段坐标值都缩小3倍,写入c字段 内容举例为 220.25 257,220.25 269.7...
  • 栈、队列、树、字符串的存储结构

    千次阅读 2016-05-06 22:04:34
    栈、队列、树的存储结构
  • SQL分隔字符串的存储过程

    千次阅读 2003-05-22 08:31:00
    “分隔字符串存储过程作用就是把“jiangjs,shenxy,cheng”类的字符串隔开保存到一个表中。 CREATE PROCEDURE [分隔字符串] ( @String NVARCHAR(1000), -- 要分隔的字符串 @SPLITCHAR NVARCHAR(10) = ,, -- ...
  • 首先我们需要知道主要数据存储位置**1、栈(动态存储方式,如局部变量,用完自动销毁) 2、堆(如malloc申请内存,用完需要手动回收内存) 3、静态存储区(静态存储方式,全局变量和静态变量,程序开始就一直...
  • JavaScript 内部,字符以 UTF-16 格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode 码点大于0xFFFF的字符),JavaScript 会认为它们是两个字符。 1、charAt() 方法可返回指定位置的字符...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,618
精华内容 28,647
关键字:

字符串的存储