c语言字符串长度怎么数

C语言字符串

在标准C中,是没有字符串变量的,但是有字符数组。而且标准C带有的标准库函数:string.h中包含了大量的字符串操作函数,当然如果必要的话,你也可以自己写代码实现这些函数的功能。以下是为大家搜索整理的C语言字符串,希望能给大家带来帮助!

对于32位操作系统

int (2字节) short (1字节) long(4字节)

unsigned char 从0到256之间

char 从-128到127之间

byte 字节就是无符号的字符

unicode:两字节的字符

由此可见:byte=nusigned char, short=char

char* :是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。

TCHAR: 在采用Unicode方式编译时是wchar_t,在普通时编译成char. 如果定义_UNICODE,声明如 :typedef wchar_t TCHAR; 如果没有定义_UNICODE,则声明如:typedef char TCHAR;

LPSTR: 是一个指向以‘’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。

LPTSTR和LPCTSTR:中的含义就是每个字符是这样的TCHAR。

LPWSTR与LPCWSTR:类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。

LPCSTR: 增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。

LPCTSTR:

#ifdef _UNICODE

typedef const wchar_t * LPCTSTR;

#else

typedef const char * LPCTSTR;

#endif

CString类, 是由微软公司集成在VC的MFC里面,包含字符串各种常见操作的类。其源码可以在MFC里面找到。

当声明一个字符串变量,首先会调用构造函数,在成功后,便可利用它的常见操作。

CString 是一个完全***的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。

1、ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式。

2、Unicode:用两个字节表示一个字符的编码方式。

MBCS宏对应的字符串指针为LPSTR,Unicode对应的指针为LPWSTR。LPSTR被定义成是一个指向以NULL(‘’)结尾的8位ANSI字符数组指针,而LPWSTR是一个指向以NULL结尾的16位双字节字符数组指针。

为了写程序的方便,微软定义了类型LPTSTR,在MBCS下它表示LPSTR,在Unicode下它表示LPWSTR,这就可以重定义一个宏进行不同字符集的转换了。

LP STR:指向一个字符串的32位指针,每个字符占1个字节。

LPC STR:指向一个常量字符串的32位指针,每个字符占1个字节。

LP TSTR:指向一个字符串的32位指针,每个字符可能占1个字节或2个字节。

LPC TSTR:指向一个常量字符串的32位指针,每个字符可能占1个字节或2个字节。

强制转换为UNICODE,应该是L。字符串(literal string)前面的大写字母L,用于告诉编译器该字符串应该作为U n i c o d e字符

串来编译。当编译器将字符串置于程序的数据部分中时,它在每个字符之间分散插入零字节。

#ifdef _UNICODE

#define _T L

#else

#define _T

#endif

These data-type mappings are defined in TCHAR.H and depend on whether the constant _UNICODE or _MBCS has been defined in your program.

当我们在利用CString 类便捷性时,有些特殊化的东西无法做,于是相互之间的转换变经常被需要:

在转换之前必须确保你的字符的范围在你的范围之内。

1.CStirng转 char *

传给未分配内存的指针.

CString cstr1="ABCD";

char * ch=cstr1.GetBuffer(cstr1.GetLength()+1); //获取指向CString最后一个字符的'地址。

cstr1.ReleaseBuffer();

注意:用完ch后,不用 ch,因为这样会破坏cstr内部空间,容易造成程序崩溃.

GetBuffer :这个函数是为一个CString对象重新获取其内部字符缓冲区的指针,返回的LPTSTR为非const的,从而允许直接修改CString中的内容! 如果nMinBufLength 比当前buffer大,那么就调用ReleaseBuffer函数去释放当前的Buffer,用一个被请求的大小去覆盖这个buffer.

而GetBuffer则是返回一个可以供调用者写入的内存,并且,你可以给定大小。其实它就相当于申请一块nLen大小的内存,只不过,这块内存是被引用在CString对象的内部而已,这是非常有效的一种用法,如果不直接用GetBuffer函数来申请的话,那么你必须用new操作符(或者 malloc()函数)在CString的外部申请,然后再将申请的内存拷贝到CString对象中,显然这是一个非常冗余的操作,会使你函数的效率大大下降。

ReleaseBuffer函数是用来告诉CString对象,你的GetBuffer所引用的内存已经使用完毕,现在必须对它进行封口,否则 CString将不会知道它现在所包含的字符串的长度,所以在使用完GetBuffer之后,必须立即调用ReleaseBuffer函数重置 CString的内部属性,其实也就是头部信息。

值赋给已分配内存的char *

CString cstr1 = "ASDDSD";

int strLength = cstr1.GetLength() + 1;

char *pValue = new char[strLength];

strncpy(pValue, cstr1, strLength);

赋值:

char* psz = “joise”; 没有构造函数,仅可以赋值(因为它本身就是基本型)

CString cstr( psz ); 可以从基本的一些字符串变量构造而来,包括char*等

string str( cstr ); 可以从几乎所有的字符串构造而来,包括CString和char*;

以上也可以看作由 char *转CStirng的办法。

1.char *:

char *psz = NULL;

psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是一样

memset( psz, 0, 10 );

strcpy( psz, “joise” );

2.CString:

CString cstr;

cstr = psz; 字符指针直接赋值

3.string:

string str;

str = psz; 字符指针直接赋值

str = cstr; CString变量直接赋值

[]psz;

加运算

string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符

char*没有+运算,只能使用strcat把两个指针连在一起;

strcat( psz, cstr );//合法

strcat( psz, str );//非法,由此可见,CString可自动转换为const char*,而string不行

[]运算

CString最好,当越界时会抛出断言异常;

string与char*下标越界结果未定义;

拓展:C语言字符串快速压缩算法代码

通过键盘输入一串小写字母(a~z)组成的字符串。

请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

压缩规则:

1、仅压缩连续重复出现的字符。比如字符串”abcbc”由于无连续重复字符,压缩后的字符串还是”abcbc”。

2、压缩字段的格式为”字符重复的次数+字符”。例如:字符串”xxxyyyyyyz”压缩后就成为”3x6yz”。

示例

输入:“cccddecc” 输出:“3c2de2c”

输入:“adef” 输出:“adef”

输入:“pppppppp” 输出:“8p”

主要说来就是进行字符串处理类的问题,主要涉及到:

1.字符串的输入与输出;

2.基本常用的C语言的字符串的函数使用;

3.对于多重情况的考虑;

4.将数字转换成字符串并进行拼接;

复制代码 代码如下:

#include

#include

#include

int main()

{

char str[100] = {'};

char res[100] = {'};

scanf("%s",str);

int length = strlen(str);

int i=0, j=0, k=0;

int count = 0;

do

{

if(i < length && str[i++] == str[j])

count++;

if(str[i] != str[j])

{

if(count <= 1)

res[k++] = str[j];

else

{

if(count > 1)

{

char temp[10] = {'};

itoa(count,temp,10);

strcpy(res+k,temp);

k+=strlen(temp);

res[k++] = str[j];

}

}

j = i;

count = 0;

}

}while(i<length);

res[k] = ';

printf("The result is : %sn",res);

return 0;

}

c语言字符串长度怎么数

转载请注明出处记得学习 » c语言字符串长度怎么数

学习

梦幻西游手游名字特殊符号

阅读(101)

本文为您介绍梦幻西游手游名字特殊符号,内容包括梦幻西游的名字符号500例,梦幻西游名字特殊符号是怎么打的,梦幻西游好看名字符号。梦幻西游的名字符号500例符号是我们生活及游戏中经常会用到的,那么梦幻西游名字可用的符号有哪些?很多

学习

cf名字符号大全复制

阅读(119)

本文为您介绍cf名字符号大全复制,内容包括cf名字符号大全,重复名字符号大全,cf手游名字合法特殊符号。cf名字符号大全虽说现如今已经过了曾经非主流的年代,不过还是有着许多的90、00后充满了复古的感觉,依旧是用着曾经的特殊符号制作出的

学习

不仅还怎么造句

阅读(104)

本文为您介绍不仅还怎么造句,内容包括不仅也造句举例,不仅也造句大全简单,不仅也造句怎么造。不仅也造句举例造句是语言运用的基本单位,它由词或词组构成,能表达一个完整的意思,如告诉别人一件事,提出一个问题,表示要求或者制止,表示某种感慨

学习

用不仅甚至更造句

阅读(99)

本文为您介绍用不仅甚至更造句,内容包括用不仅甚至造句,用不仅而且甚至造句大全,用不仅而且甚至造句。用不仅甚至造句造句是语言运用的基本单位,它由词或词组构成,能表达一个完整的意思,如告诉别人一件事,提出一个问题,表示要求或者制止,表示

学习

用不仅而且造句

阅读(93)

本文为您介绍用不仅而且造句,内容包括用不仅造句大全,不仅还怎么造句,用不仅又造句大全。用不仅造句大全学会造句是语文学习经常要做而且必须要做的事情,学会造句的坚持训练有助于学生积累大量的写作素材、并且能够降低写作的畏难情绪,接

学习

改写句子的方法与技巧

阅读(116)

本文为您介绍改写句子的方法与技巧,内容包括改写句子的方法,改写句子的方法和技巧英语,改写句子的方法百度文库。改写句子的方法在平时的学习、工作或生活中,大家都听说过或者使用过一些比较经典的句子吧,句子由词或词组部分和语调所表示

学习

不仅而且造句最好的句子

阅读(107)

本文为您介绍不仅而且造句最好的句子,内容包括不仅而且造句,不仅而且造句子,不仅而且造句四年级。不仅而且造句造句含义:指懂得并使用字词,按照一定的句法规则造出字词通顺、意思完整、符合逻辑的句子。依据现代语文学科特征,可延伸为写段

学习

游戏符号名字大全

阅读(116)

本文为您介绍游戏符号名字大全,内容包括游戏符号名字,游戏符号名字两边带花,游戏名字可以用的符号。游戏符号名字网名指在网上使用的名字。由于网络是一个虚拟的世界,为了避免使用真实姓名带来的麻烦所以发明了网名。以下是为大家整理的

学习

踏青的唯美句子诗句

阅读(113)

本文为您介绍踏青的唯美句子诗句,内容包括野外踏青的诗句及句子,野外踏青诗词,关于踏青的诗句简单的。野外踏青的诗句及句子雨,滴在柳树上,柳树抽出了翠绿欲滴新枝;雨,滴在花苞上,花苞绽放出最美丽花瓣;雨,滴在泥土上,泥土里长出了一碧千里草。

学习

王者荣耀名字小尾巴符号

阅读(119)

本文为您介绍王者荣耀名字小尾巴符号,内容包括王者荣耀名字符号小圈,王者荣耀特殊符号名字生成大全,王者荣耀把名字圈起来的符号。王者荣耀名字符号小圈在王者荣耀里,玩家昵称是可以有一些特殊符号的,比如圈圈(如下图),看起来有点像句号,但

学习

word格式怎么去掉空字符

阅读(129)

本文为您介绍word格式怎么去掉空字符,内容包括设置Word文档字符格式教程,word中设置字符格式的三种方法,word字符格式怎么设置。设置Word文档字符格式教程在使用Word中,怎么设置Word文档字符格式,下面是带来的设置Word文档字符格式教程,

学习

休闲方式有哪些分类

阅读(121)

本文为您介绍休闲方式有哪些分类,内容包括休闲方式有哪些,休闲方式有哪些现在,休闲方式排行榜。休闲方式有哪些导语:经过一系列调查研究和资料分析,我们已经意识到时代在进步,工作之余的休闲生活已不可缺少,那么休闲方式有哪些呢?以下是精心

学习

猜想的近义词是什么

阅读(146)

本文为您介绍猜想的近义词是什么,内容包括猜想的近义词,猜想的近义词排行榜,猜想的近义词标准答案。猜想的近义词近义词,是指词汇意义相同或相近的词语,如“美好”和“美妙”、“懒惰”和“怠惰”、“枯萎”和“干枯”、“宽敞”和“宽阔

学习

网游带符号名字大全

阅读(128)

本文为您介绍网游带符号名字大全,内容包括网游名字符号1125例,网游名字好看的符号大全集,网游的游戏名字带符号大全。网游名字符号1125例网名指在网上使用的名字。由于网络是一个虚拟的世界,为了避免使用真实姓名带来的麻烦所以发明了网

学习

双板滑雪板长度怎么选

阅读(103)

本文为您介绍双板滑雪板长度怎么选,内容包括如何选择双板滑雪板长度,儿童双板滑雪板长度选择,自由式双板长度怎么选择。如何选择双板滑雪板长度如何选择双板滑雪板长度,很多刚入门滑雪的朋友,对许多滑雪知识还不是很清楚的时候。都会选择

学习

贾平凹作品的语言

阅读(135)

本文为您介绍贾平凹作品的语言,内容包括贾平凹作品的语言特色,贾平凹作品的特色,贾平凹小说语言特色。贾平凹作品的语言特色贾平凹,本名贾平娃,1952年2月21日出生于陕西省商洛市丹凤县棣花镇,中国当代作家,下面是收集整理的贾平凹作品的语言

学习

骆驼祥子老舍的京味语言以及解析

阅读(165)

本文为您介绍骆驼祥子老舍的京味语言以及解析,内容包括从《骆驼祥子》看老舍语言特色,老舍骆驼祥子语言特点,老舍骆驼祥子幽默的语言特色论文。从《骆驼祥子》看老舍语言特色在个人成长的多个环节中,大家总少不了接触论文吧,论文是讨论某

学习

说明文语言起限制作用

阅读(179)

本文为您介绍说明文语言起限制作用,内容包括说明文语言的特色介绍,说明文语言的答题技巧,说明文语言的特色有哪些。说明文语言的特色介绍说明文是一种以说明为主要表达方式的文章体裁。对客观事物做出说明或对抽象事理的阐释,使人们对事

学习

琵琶行语言的韵律感

阅读(110)

本文为您介绍琵琶行语言的韵律感,内容包括《琵琶行》语言特色,琵琶行语言,琵琶行语言特征。《琵琶行》语言特色《琵琶行》诗人通过对琵琶女高超的弹奏技艺的描写和悲凉身世的叙述,表达了对琵琶女的深切同情。下面是整理的《琵琶行》语言

学习

议论文的语言特色答题技巧

阅读(448)

本文为您介绍议论文的语言特色答题技巧,内容包括议论文的语言特色,议论文的语言特色怎么写,议论文的语言特色有哪些。议论文的语言特色大家都经常看到作文的身影吧,尤其是占有重要地位的议论文,议论文可分为三部分:是什么,为什么,怎么做。这

学习

阿q正传语言特色分析

阅读(123)

本文为您介绍阿q正传语言特色分析,内容包括阿Q正传语言特色,阿q正传语言特色体现,阿q正传内容。阿Q正传语言特色导语: 用诙谐、幽默的语言。描述沉重现实,是《阿Q正传》的特点。以下是收集整理了阿Q正传语言特色,供大家参考借鉴,希望可以帮

学习

乡愁语言特色

阅读(90)

本文为您介绍乡愁语言特色,内容包括《乡愁》语言特色分析,乡愁的语言,乡愁语言经典语录。《乡愁》语言特色分析《乡愁》以时间的发展来综合意象,可称为意象递进。下面是《乡愁》语言特色分析,一起看一下吧。从21岁负笈漂泊台岛,到小楼孤灯