精华内容
下载资源
问答
  • Java语言中,字符串“Java程序员”在内存中占用的字节数是:(D) A.10 B.7 C.13 D.14 分析 说白了归根到底就是编码问题,java实际是采用的unicode编码,准确的说是采用utf-16编码的(utf-16可以说是unicode编码的...

    Java语言中,字符串“Java程序员”在内存中所占用的字节数是:(D)
    A.10
    B.7
    C.13
    D.14

    分析

    说白了归根到底就是编码问题,java实际是采用的unicode编码,准确的说是采用utf-16编码的(utf-16可以说是unicode编码的一种实现形式),这在java的说明手册中是可以清晰看到的。

    UTF-16

    任何字符对应的数字都用两个字节来保存,所以说在这道题中没有指定编码格式,那么采用默认的编码格式(即utf-16),每个字符都占用2个字节。

    UTF-8

    utf-8采用变长字节的形式来实现unicode编码:
    在utf-8中===============>
    占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码

    占3个字节的:基本等同于GBK,含21000多个汉字

    占4个字节的:中日韩超大字符集里面的汉字,有5万多个

    一个utf8数字占1个字节

    一个utf8英文字母占1个字节
    如果指定了utf-8格式,因为中文汉字3或4个字节不等,多数为3个字节,这里自己可以测试一下,结果是每个字母占用1个字节,每个汉字各占3个字节,总共13个字节。

    最后

    可以看看下面两篇文章,深入理解一下Unicode、UTF-8、UTF-16之间的区别,还有utf-8编码的占用字节。
    Unicode、UTF-8、UTF-16之间的区别
    utf-8编码的占用字节

    展开全文
  • 字符串及有效长度(字节数)计算

    千次阅读 2020-12-19 22:48:16
    字符串 即字符数组,与整型数组类似,占用连续空间 字符串在内存中,除了有效字符以外,还会在后面补一个’/0’,作为字符串结束标识 数组大小计算方式 元素个*元素类型大小

    字符串
    字符串其实就是一个以空字符’/0’结尾的字符数组,在定义存储字符串的数组时,要手动在数组末尾加上’/0’,或者直接使用字符串对数组进行初始化。
    sizeof
    sizeof运算符功能是获得所建立对象的字节大小,计算的是类型所占内存的多少,其参数可以是数组、指针、类型、对象、函数等;
    strlen()
    strlen()函数是获得字符串所占内存的有效字节数,其参数是字符串或以’/0’结尾的字符数组,如果传入不包含’/0’的字符数组,它会一直往后计算,直到遇到’/0’,因此计算结果是错误的。
    //sizeof是运算符;strlen()是C语言标准库函数,包含在 string.h 头文件中
    ——《C语言开发基础教程(Dev-c++)第2版》

    展开全文
  • 字符数组用于存放字符或字符串,字符数组中一个元素存放一个字符,它在内存中占用一个字节。 在做这题时,需要思考一下。从实参传入字符串到形参进行统计,形参统计字符数量时会用到循环,但我们输入的字符串是...

    知识点:函数的调用和字符数组的运用。

    字符数组是指用来存放字符数据的数组。其定义的一般形式为: char 数组名[数据长度] 。字符数组用于存放字符或字符串,字符数组中的一个元素存放一个字符,它在内存中占用一个字节。

    在做这题时,需要思考一下。从实参传入字符串到形参进行统计,形参统计字符的数量时会用到循环,但我们输入的字符串是随机的,并没有准确的量。

    另外循环中给定的条件,必须要达到条件满足时才可停止。举个例子,假设循环结束条件是 i<=10,我们在输入字符时需得输入十个或十个以上才会停止输入进行统计,因此这样会非常局限。

    提到这个问题后,我们今天就讲述一下字符串的串结束标志

    定义

    字符串和字符串结束标志
    在C语言中,是将字符串作为字符数组来处理的。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符’\0’作为结束标志

    简而言之,在每个字符串结束后计算机会自动添加结束标志,来判定此字符串已经结束。

    细心的同学可能已经发现解决循环统计的问题了,将串结束标志作为循环结束条件,当字符数组中输出的元素等于串结束标志,那么此循环便会结束。是不是就达到了我们随机输入效果了。

    for (int i = 0; a[i]!='\0'; i++)
    

    陈述: 由主函数输入一串字符,通过调用函数统计其中字母、数字等的个数。

    分析:

    1. 创建统计字符串个数函数。定义要统计的变量名,分别赋初值为 0 。
    2. 利用循环输出由主函数输入的字符串,并进行判断输出元素是否字母,如果是,字母变量++(自增,加一)。
    3. 对需要统计的类型依次进行判断,最后输出。
    void statistical(char a[])
    {
    	int letter = 0;
    	int number = 0;
    	int space = 0;
    	int other = 0;
    	for (int i = 0; a[i]!='\0'; i++)
    	{
    		if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))
    			letter++;
    		else if (a[i] >= '0' && a[i] <= '9')
    			number++;
    		else if (a[i] == ' ')
    			space++;
    		else
    			other++;
    	}
    	cout << "字母的个数有:" << letter << endl;;
    	cout << "数字的个数有:" << number << endl;
    	cout << "空格的个数有:" << space<<endl;
    	cout << "其他个数有:" << other << endl;
    
    }
    

    进行到这里,我们简单讲一下关于从主函数输入字符串的问题。

    同学们熟悉c和c++中的输入是 scanf 和 cin ,但这两个函数输入字符串时存在一个问题,就是如果输入了空格会认为字符串结束,空格后的字符将作为下一个输入项处理,。

    针对此问题,我们可以引入 cin.getline 和 gets 函数输入 。

    cin.getline

    此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为换行符,此函数并不保留结束符,它通过结束符确定结束,但不保存结束符,它用空字符来替换结束符。其语法为:
    cin.getline( 字符数组变量名,字符数组元素的个数,结束符)。
    为char a[10]输入元素,cingetline(a,10,’\n’)。

    gets

    gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。
    语法:gets(字符串变量名)
    为char a[10]输入元素,gets(a)。
    gets()函数用来从标准输入设备(键盘)读取字符串直到换行符结束,但换行符会被丢弃,然后在末尾添加’\0’字符。

    gets函数与cin.getline函数相似,同学们可以先记住用法,关于具体表现的作用可以去查阅资料。

    代码演示

    #include<iostream>
    using namespace std;
    #define N 50
    void statistical(char a[])
    {
    	int letter = 0;
    	int number = 0;
    	int space = 0;
    	int other = 0;
    	for (int i = 0; a[i]!='\0'; i++)
    	{
    		if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z'))
    			letter++;
    		else if (a[i] >= '0' && a[i] <= '9')
    			number++;
    		else if (a[i] == ' ')
    			space++;
    		else
    			other++;
    	}
    	cout << "字母的个数有:" << letter << endl;;
    	cout << "数字的个数有:" << number << endl;
    	cout << "空格的个数有:" << space<<endl;
    	cout << "其他个数有:" << other << endl;
    
    }
    int main()
    {
    	char a[N];
    	cout << "Please enter a string of characters: " << endl;
    	//gets_s(a);//vs不支持gets,需要在后面加上_s
    	cin.getline(a, N,'\n');
    	statistical(a);
    	return 0;
    }
    
    展开全文
  • 笔记: (1) 输入变量可以是标量、向量、矩阵或n维矩阵(2) 输入变量必须是非复杂且完整(即不允许声明为“稀疏”类型矩阵) (4) 测试,DZIP 每秒压缩字节的数据。 (5) 测试,稀疏矩阵或具有规则结构...
  • Java语言,默认使用Unicode编码方式,每个字符占用两个字节,因此可以用来存储...1. 判断字符串中是否包含中文字符(注意UTF-8环境下和GBK环境下,中文 占的字节数不一样,UTF-8环境下中文占三个字节,而G...

    在Java语言中,默认使用Unicode编码方式,每个字符占用两个字节,因此可以用来存储中文。虽然String是由char所组成的,但是它采用了更加灵活的方式来存储,即英文占用一个字符,中文占用两个字符,采用这种存储的方式可以减少所需要的内存,提高存储效率。

    1. 判断字符串中是否包含中文字符。(注意在UTF-8环境下和GBK环境下,中文 占的字节数不一样,在UTF-8环境下中文占三个字节,而在GBK环境下,中文字符占2个字节)

            String string = "你好abc";
            System.out.println(string.getBytes().length);   //字节长度
            System.out.println(string.length());    //字符串长度
            System.out.println(string.getBytes().length == string.length()); //字节长度不等于字符串

    结果为:

    7
    5
    false
    

    2. 判断字符是否为中文字符

            char ch = '中';
            System.out.println(String.valueOf(ch).matches("[\u4e00-\u9fa5]"));

    结果为 true

    [\u4e00-\u9fa5] 这个正则中的\u4e00 和\u9fa5 是unicode编码,正好对应对应中文编码的开始和结束的两个值,所以该正则表达式可以判断是否是中文字符编码。

    展开全文
  • C++,string的每一个字符串的结尾都是字符'\0',因此字符串占用的内存比表面上使用的字节数多一。C++需要注意的是,C++将const字符串保存常量存储区,当多个指针指向同一个const字符串时,者几个指针...
  • 大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,UTF-8编码的中文字符是3字节,GBK为2个字节。    PHP 也自带几种字符串截取函数,其中常用到的就是 substr 和 mb_substr。  ...
  • 一、单项选择题(共30分,每题1分)1....字符串“ABC”在内存占用的字节数是( )A.3 B. 4 C.6 D.83.在C语言,合法的长整型常数是( )A.0L B.4962710 C.0.054838743 D.2.1869 e104.执行语句“x=(a=3,b=a—...
  • C/C++数据大小、字节对齐、内存占用总结

    千次阅读 多人点赞 2020-05-21 19:09:58
    特殊string时,由于字符串本质上就是自带‘\0’结尾 char[] 数组,而char 大小有恰好为1, 因此sizeof()就正好会是数组长度; C++98是不允许对类非静态成员变量使用sizeof(),而C++11是合法...
  • 1 2和’2’是不是一回事2和’2’根本不是一回事,2是数字,’2’是一个字符,他们计算机内存中占用一个字节,但是实际意义根本不一样。2 23和‘23’又是怎么一回事 转载于:...
  • 字符数组用于存放字符或字符串,字符数组中一个元素存放一个字符,它在内存中占用一个字节。C语言中没有字符串类型,字符串是存放在字符型数组中。 字符数组定义可以类比于整型数组,定义整数组为 int ...
  • 我们知道,在c语言中,使用sizeof ()计算在内存中占用的字节数, 引用string.h后,使用strlen()计算字符串的长度(不包含\0)。 而在object-c中, “length”这个方法,可以返回字符串的长度。 比如:NSString ...
  • PHP字符串的编码问题

    2014-09-22 16:35:44
    大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,UTF-8编码的中文字符是3字节,GBK为2个字节。    PHP 也自带几种字符串截取函数,其中常用到的就是 substr 和 mb_substr...
  • 我们知道python的基本数据类型有数字类型,bool类型,None空值类型,字符串类型,但是在内存中都是有占用空间的,其中字符串类型占用的空间是可变的,其他的都是固定不变的,比如a=12, 和a=1200占用的内存空间是...
  • 大家都知道,不同字符编码,其在内存占用的字节数不一样。如ASCII编码字符占用1个字节,UTF-8编码的中文字符是3字节,GBK为2个字节。 PHP 也自带几种字符串截取函数,其中常用到的就是 substr 和 mb_substr。 ...
  • 8.4.2 Optimizing MySQL Data Types 优化mysql数据类型 ...因为大数字能够被更少的字节数存储比字符串,它更快而且占用更少的内存去转变和对比他们。 >如果你使用数字类型的数据,很多情况下从数据库
  • 原标题:C语言程序设计 第二章 习题详解 第二章 基本数据类型和表达式 一、选择题1.下列字符列,可以作为...字符串“xyz”在内存占用的字节数是( ) ① 3 ②4 ③6 ④84.在以下字符列,合法的长整型常数是( ) ① ...
  • 1. sizeof 为C关键字,用于求对象所占用的字节数。详见另一篇《Sizeof与Strlen的区别与联系》。 2. 声明一个函数指针:int ( *p )(int,int) 函数名的本质是函数代码内存空间的首地址,将其赋给指针,则该指针可以...
  • 本文对C/C++中字节的玩法进行了详细总结 ...string时,由于字符串本质上就是自带‘\0’结尾 char[] 数组,而char 大小有恰好为1, 因此sizeof()就正好会是数组长度; const char a[] = "abcdefghi"; co...
  • 一般把存储器的一个字节称为一个内存单元,不同的数据类型所占用的内存单元不等,例如int型占4个内存单元,char型占1个内存单元。为了正确地访问这些内存单元,必须为每个内存单元编上号,根据一个内存单元的...
  • 一、单项选择题(共30分,每题1分)1....字符串“ABC”在内存占用的字节数是( )A.3 B. 4 C.6 D.83.在C语言,合法的长整型常数是( )A.0L B.4962710 C.0.054838743 D.2.1869 e104.执行语句“x=(a=3,b=a—...
  • 字符类型 char 1~2000字节 固定长度字符串,长度不够用空格补充 varchar2 1~4000字节 可变长度字符串,与CHAR类型相比,使用VARCHAR2可以节省磁盘空间,但查询效率没有char类型高 数值类型 Number(m,n) m(1~38) ...
  • 第十二章 存储数据和对象12.1数据存储概述12.1.1文本与二进制对比文本格式易于阅读和调试,跨平台...12.1.3字节次序(Endianness)处理器把多字节数字存放在内存中可以是big-endian(低端优先),也可以是little-endian(高

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

字符串在内存中占用的字节数