当前位置:文档之家› 字符串可以用字符数组与字符串变量两种方式来存储

字符串可以用字符数组与字符串变量两种方式来存储

字符串可以用字符数组与字符串变量两种方式来存储
字符串可以用字符数组与字符串变量两种方式来存储

字符串可以用字符数组与字符串变量两种方式来存储,效果类似。

一、用字符数组来存储字符串:

char st1[100],st2[100] ; //字符数组说明

cin>>st1>>st2;

long a,b;

输入:hello, world

则st1={…h?,?e?,?l?,?l?,?o?,?,?,?\0?}

st2={…w?,?o?,?r?,?l?,?d?,?\0}

字符?\0?为字符串结束标志

1. 字符数组长度

strlen(st1); //如a=strlen(st1);b=strlen(st2); 则a=6,b=5

2. 字符数组比较

不能直接比较,st1>st2是错误的,要用strcmp()函数

strcmp(st1,st2); //st1=st2相等则输出0,st1st2输出1 strncmp(st1,st2,n); 把st1,st2的前n个进行比较。

3. 连接字符数组

不能直接用st1=st1+st2;用strcat()函数

strcat(st1,st2); //将st1和st2连接后赋给st1,本例连接后st1为”hello,world”

strncat(st1,st2,n); n表示连接上st2的前n个给st1,在最后不要加'\0'。

4. 替换

strcpy(st1,st2); //用st2的值替换st1的值,字符数组不能如此赋值st1=st2或st1[]=st2[]都是错误的

本例中st1值被替代为”world”

strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加'\0'。

5. 其他函数

strchr(st1,ch) //ch为要找的字符。如strchr(st1,?e?);会截取出st1中以字母?e?开头的字符串,要用string类型的来存储,如string c1; c1=strchr(st1,?e?); 则c1为”ello”

strspn(st1,st2); //返回st1起始部分匹配st2中任意字符的字符数。本例

中”hello,”中的第一个字符?h?不能在”world”中找到匹配字符,因此返回值为0。如st1=”rose”;st2=”worse”;则返回值为4,因为rose在worse中都能找到匹配字符。

strrev(); //颠倒字符串

二、用字符串来存储字符串

string str1,str2; cin>>str1>>str2;

//如输入“hello, world”则str1=”hello,” str2=”world”

可直接赋值: str1=str2;

1. 字符串长度

len = str1.length();

2. 字符串比较

可以直接比较,即str1>str2;str1==str2;等

3. 连接

可以直接连接,即str1 += str2;等

4. 字符串提取

str2 = str1.substr(); //str2值被赋值为str1

str2 = str1.substr(pos1); //如str2=str1.substr(2);则str2=”llo”;

str2=str1.substr(pos1,len1); //提取指定位置指定长度的字符串,如

str2=str1.substr(1,2) ;则str2=”el”

5. 字符串搜索

where = str1.find(str2); //返回str2是在str1中的最先被找到的位置

where = str1.find(str2,pos1); pos1是从str1的第几位开始。

where = str1.rfind(str2); 从后往前搜。

6. 插入字符串

不是赋值语句。

str1.insert(pos1,str2); //如str1.insert(2,str2)则str1=”heworldllo,”

str1.insert(pos1,str2,pos2,len2);

str1.insert(pos1,numchar,char); numchar是插入次数,char是要插入的字符。

7. 替换字符串

str1.replace(pos1,str2);

str1.replace(pos1,str2,pos2,len2);

8. 删除字符串

str.erase(pos,len)

str.clear();

9. 交换字符串

swap(str1,str2);

注意:1.要包含头文件#include

2.在有些场合下用字符数组char st1[100]比string st2还好用些,可根据具体情况作不同选择。

3.在读入一个含有空格的字符串时用cin是不行的(cin读字符串或字符数组时,自动以空格或回车作为分格符)

字符串可以用字符数组与字符串变量两种方式来存储

字符串可以用字符数组与字符串变量两种方式来存储,效果类似。 一、用字符数组来存储字符串: char st1[100],st2[100] ; //字符数组说明 cin>>st1>>st2; long a,b; 输入:hello, world 则st1={…h?,?e?,?l?,?l?,?o?,?,?,?\0?} st2={…w?,?o?,?r?,?l?,?d?,?\0} 字符?\0?为字符串结束标志 1. 字符数组长度 strlen(st1); //如a=strlen(st1);b=strlen(st2); 则a=6,b=5 2. 字符数组比较 不能直接比较,st1>st2是错误的,要用strcmp()函数 strcmp(st1,st2); //st1=st2相等则输出0,st1st2输出1 strncmp(st1,st2,n); 把st1,st2的前n个进行比较。 3. 连接字符数组 不能直接用st1=st1+st2;用strcat()函数 strcat(st1,st2); //将st1和st2连接后赋给st1,本例连接后st1为”hello,world” strncat(st1,st2,n); n表示连接上st2的前n个给st1,在最后不要加'\0'。 4. 替换 strcpy(st1,st2); //用st2的值替换st1的值,字符数组不能如此赋值st1=st2或st1[]=st2[]都是错误的 本例中st1值被替代为”world” strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加'\0'。 5. 其他函数 strchr(st1,ch) //ch为要找的字符。如strchr(st1,?e?);会截取出st1中以字母?e?开头的字符串,要用string类型的来存储,如string c1; c1=strchr(st1,?e?); 则c1为”ello” strspn(st1,st2); //返回st1起始部分匹配st2中任意字符的字符数。本例 中”hello,”中的第一个字符?h?不能在”world”中找到匹配字符,因此返回值为0。如st1=”rose”;st2=”worse”;则返回值为4,因为rose在worse中都能找到匹配字符。 strrev(); //颠倒字符串 二、用字符串来存储字符串 string str1,str2; cin>>str1>>str2; //如输入“hello, world”则str1=”hello,” str2=”world” 可直接赋值: str1=str2; 1. 字符串长度 len = str1.length(); 2. 字符串比较 可以直接比较,即str1>str2;str1==str2;等 3. 连接 可以直接连接,即str1 += str2;等

C++中字符数组与string的相互转换及字符串拼接(字符串知识点总结)

【字符数组转化成string类型】 Char ch[]=”ABCDEFG” String str(ch);//也可string str=ch; 或者 Char ch[]=”ABCDEFG” String str; Str=ch;//在原有基础上添加可以用str+=ch; 【string类型转换为字符数组】 Char buf[10] String str(“ABCDEFG”); Length=str.copy(buf,9); Buf[length]=’\0’; 或者 Char buf[10]; String str1(“ABCDEFG”); strcpy(buf,str1.c_str());//strncpy(buf,str1.c_str(),10); 【字符串拼接】 一、string类字符串 重点:函数append的用法: (1)向s1-string的后面加s2-string (1个参数)

s.append(s2); 或s1+=s2; 也可直接将字符串拼接:如 string s=“hello”; s.append(" world");//“hello"后面拼接”world" (2)(2个参数) 1.向s1-string的后面加s2-string的一部分 s1.append(s2,n); // 把字符串s2的前n个字符连接到当前字符串结尾 2.向string后面加多个字符 string s1 = "hello "; s1.append(4,’!’); //在当前字符串结尾添加4个字符! s1 = “hello !!!”; (3).向string的后面加string的一部分(3个参数) 1.string s1 = "hello ", s2 = "beautiful world "; s1.append(s2, 11, 5); //把字符串s2中从11开始的5个字符连接到当前字符串的结尾得s1 = “hello world”; 2.string s1 = "hello ", s2 = “beautiful world”; s1.append(s2.begin()+11, s2.end()); //把s2的迭代器begin()+11和end()之间的部分连接到当前字符串的结尾得“hello world”; 二、char数组类字符串 重点:strcat()函数,该函数接受两个字符串作为参数,该函数把第2个字符串

20-字符数组与字符串类型.

字符数组与字符串类型 字符型变量:VAR CH :CHAR ; 一、字符数组:数组基类型(元素的类型为字符型。 VAR A:ARRAY [ 1. . N ] OF CHAR ; 输入、输出也与普通数组一样,只能用循环结构,逐个元素地给它赋值,即: FOR I:= 1 TO N DO READ(A[ I ] ; 或者: A[I]:=‘ X ’ ; 不能用:A :=‘ IT IS A PEN ’ ; 例一:判断从键盘输入的字符串是否为回文(从左到右和从右到左读一串字符的值是一样的, 如 ABCDCBA , 1234321, 11, 1 ,串长 < 100 ,且以点号‘. ’结束。 2000年竞赛题:判断一个数是否为回文数。 VAR LETTER:ARRAY [ 1. . 100 ] OF CHAR ; I, J :0. . 100 ; CH:CHAR ; BEGIN WRITELN(‘ INPUT A STRING :’ ; I := O ; READ (CH ; WHILE CH < > ‘. ’ DO BEGIN

I:=I+1 ; LETTER[ I ] := CH ; READ (CH ; END ; J :=1 ; { I 指向数组的尾部, J 指向数组的头部 ,逐个比较 } WHILE (J < I AND (LETTER[ J ]= LETTER[ I ] DO BEGIN I:= I – 1 ; J :=J + 1 END ; IF J > = I THEN WRITELN(‘ YES ’ ELSE WRITELN(‘ NO ’ ; END . 二、字符串类型:针对 TURBO PASCAL 1、字符串常量:CONST STR=‘ THIS IS A BOOK。’ ; 我们经常在 WRITE 语句中用到字符串,也可以 WRITE (STR ;语句输出 STR 的值。 2、字符串类型:也是一种构造类型。 定义形式:TYPE 字符串类型名 = STRING[ N ];

字符串和字符数组之间的转换

字符串和字符数组之间的转换 2010-11-02 16:53:00| 分类: |举报|字号订阅 字符串类提供了一个void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。如下例: private void TestStringChars() { string str = "mytest"; char[] chars = (); = ""; "Length of \"mytest\" is " + + "\n"); "Length of char array is " + + "\n"); "char[2] = " + chars[2] + "\n"); } 例中以对转换转换到的字符数组长度和它的一个元素进行了测试,结果如下: Length of "mytest" is 6 Length of char array is 6 char[2] = t 可以看出,结果完全正确,这说明转换成功。那么反过来,要把字符数组转换成字符串又该如何呢? 我们可以使用类的构造函数来解决这个问题。类有两个构造函数是通过字符数组来构造的,即 String(char[]) 和String[char[], int, int)。后者之所以多两个参数,是因为可以指定用字符数组中的哪一部分来构造字符串。而前者则是用字符数组的全部元素来构造字符串。我们以前者为例, 在 TestStringChars() 函数中输入如下语句: char[] tcs = {'t', 'e', 's', 't', ' ', 'm', 'e'}; string tstr = new String(tcs); "tstr = \"" + tstr + "\"\n"); 运行结果输入 tstr = "test me",测试说明转换成功。 实际上,我们在很多时候需要把字符串转换成字符数组只是为了得到该字符串中的某个字符。如果只是为了这个目的,那大可不必兴师动众的去进行转换,我们

C 语言程序设计实验答案_数组、指针与字符串解析

实验06 数组、指针与字符串(4学时) (第6章数组、指针与字符串) 一、实验目的 二、实验任务 6_1(习题6-25)编写并测试3×3矩阵转置函数,使用数组保存3×3矩阵。 6_2(习题6-26)使用动态内存分配生成动态数组来重新完成上题(n阶方阵),使用指针实现函数的功能。 6_3 编程实现两字符串的连接。要求使用字符数组保存字符串,不要使用系统函数。

6_4 使用string类声明字符串对象,重新实现上一小题。 6_5(习题6-27)声明一个Employee类。 其中包括姓名、街道地址、城市和邮编等属性,以及change_name()和display()等函数。display()显示姓名、街道地址、城市和邮编等属性,change_name()改变对象的姓名属性,实现并测试这个类。 6_6(习题6-27)声明包含5个元素的对象数组,每个元素都是Employee 类型的对象。 6_7 修改实验4中的people(人员)类。 具有的属性如下:姓名char name[11]、编号char number[7]、性别char sex[3]、生日birthday、身份证号char id[16]。其中“出生日期”声明为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。 要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。 在测试程序中声明people类的对象数组,录入数据并显示。 三、实验步骤 1.(编程,习题6-25)编写矩阵转置函数,输入参数为3×3整型数组。 使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟需要对哪些元素进行操作,编写main()函数实现输入输出。程序名:lab6_1.cpp。 参考运行结果:

C语言中字符变量字符串和字符数组应用

C语言中字符变量字符串和字符数组应用 字符变量(type`char`?字符串(string)和字符数组(type`char`arrary)是C语言中非常重要的结构成分,也是应用编程中常发生混淆?导致错误发生的成分?一?注意区别字符数组中的字符和字符串C语言中无字符串变量,但提供了字符数组character arrary) 用于存储字符串,例如: char str[]="Hello"; 同时,字符数组亦用于存储字符或字符变量,例如: /*存放字符例*/ char Chars[]={`H``e`,`1``1`,`o`}; /*存放字符变量例*/ char ch=getch(); char CharVar[]=ch; str和Chars的内容尽管由相同字母构成,但前者是字符串(str)后者为一列字符(Chars)?两者在内存中的结构不同,即字符串结尾有NULL 0(字符串终止符)?在应用编程实践中,常常需要从键盘获取字符,依次存入字符数组中,再以字符串输出函数输出到屏幕等,譬如,在中文环境?图形模式下中文字符的键盘输入和屏幕显示?如混淆字符数组中字符组与字符串的差别,则可能得到奇怪的结果?如例: CharStr() { int i,CharNum=5; unsigned char str[80]; for(i=0;i

字符串和字符数组之间的转换

字符串和字符数组之间地转换 分类:工具举报字号订阅 字符串类提供了一个 () 方法,该方法可以实现字符串到字符数组地转换.如下例: () { ""; [] (); ""; (" \"\" ""\"); (" ""\"); ("[] "[] "\"); } b5E2R。 例中以对转换转换到地字符数组长度和它地一个元素进行了测试,结果如下: "" [] 可以看出,结果完全正确,这说明转换成功.那么反过来,要把字符数组转换成字符串又该如何呢?我们可以使用类地构造函数来解决这个问题.类有两 个构造函数是通过字符数组来构造地,即 ([]) 和[[], , ).后者之所以多两个参数,是因为可以指定用字符数组中地哪一部分来构造字符串.而前者则是用字符数组地全部元素来构造字符串.我们以前者为例,在 () 函数中输入如下语句: p1Ean。 [] {'', '', '', '', ' ', '', ''}; (); (" \"" "\"\");DXDiT。 运行结果输入" ",测试说明转换成功.实际上,我们在很多时候需要把 字符串转换成字符数组只是为了得到该字符串中地某个字符.如果只是为了这个目地,那大可不必兴师动众地去进行转换,我们只需要使用地 [] 运算符就可 以达到目地.请看下例,再在() 函数中加入如如下语名:RTCrp。 []; ("\"" "\"[] "()); 正确地输出是 " "[] ,经测试,输出正确.

. 字符串和字节数组之间地转换 如果还想从类中找到方法进行字符串和字节数组之间地转换,恐怕你会失望了.为了进行这样地转换,我们不得不借助另一个类:.该类提供了 [] () 方法将字符串转换成字节数组,还提供了([]) 方法将字节数组转换成字符串.5PCzV。类似乎没有可用地构造函数,但我们可以找到几个默认地,即 (获取系统地当前代码页地编码)、(获取位字符集地编码)、(获取采用字节顺序地格式地编码)、(获取格式地编码)、(获取格式地编码) 等.这里主要说说和用于转换地区别.jLBHr。 在字符串转换到字节数组地过程中,会将每个单字节字符,如半角英文,转换成个字节,而把每个双字节字符,如汉字,转换成个字节.而则会将它们都转换成两个字节.我们可以通过下列简单地了解一下转换地方法,以及使 用和地区别:xHAQX。 () { "语言"; [] (); [] (); "", ""; ( ) { ("") " "; } ( ) { ("") " "; } ""; (" ""\"); ( "\"); (" ""\"); ( "\"); } LDAYt。 运行结果如下,不说详述,相信大家已经明白了.

java数组与字符串

Ex3:数组和字符串 1、假设s1,s2,s3,s4是四个字符串,其值如下:(25分) String s1=“Welcome to Java” String s2=s1 String s3=new String(“welcome to java”); String s4=“welcome to java” 下面表达式的结果是什么? (1)s1= =s2; 结果:true (2)s2= =s2; 结果:true (3)s1.equal(s2); 结果:true (4)s2.equal(s3); 结果:false (5)https://www.doczj.com/doc/001997816.html,pareTo(s2); 结果:0 (6)https://www.doczj.com/doc/001997816.html,pareTo(s3); 结果:-32 (7)s1= =s4; 结果:false (8)s1.charAt(0); 结果:W (9)s1.indexof(…j?); 结果:11 (10)s1.indexof(“to”); 结果:8 (11)https://www.doczj.com/doc/001997816.html,stindexof(…a?); 结果:14 (12)https://www.doczj.com/doc/001997816.html,stindexof(“o”,15); 结果:9 (13)s1.length() 结果:15 (14)s1.substring(5) 结果:me to Java (15)s1.substring(5,11) 结果:me to J (16)s1.startwith(“wel”) 结果:false (17)s1.ednwith(“Java”) 结果:true (18)s1.toLowerCase() 结果:welcome to java (19)s1.toUpperCase() 结果:WELCOME TO JA V A (20)“Welcom”.trim() 结果:Welcome (21)s1.replace(…o?, …T?) 结果:WelcTme tT Java (22)s1.replaceAll(…o?, …T?) 结果:WelcTme tT Java (23)s1.replaceFirst(…o?, …T?) 结果:WelcTme to Java (24)s1.toCharArray() 结果:char []s1={…W?,?e?,?l?,?c?,?o?,?m?,?e?,?…,?t?,?o?, ……,?J?,?a;,?v?,?a?} 为了创建一个字符串“Welcome to Java”,可能会用到如下所示的语句: String s=”Welcome to Java”; 或者 String s=new String(“Welcome to Java”); 哪个语句更好?为什么? 解:第一个语句。因为字符串使用非常频繁第一种比较简化,而第二种比较繁琐。 2、假设s1和s2是两个字符串,下面哪些语句或表达式是错误的?(9分) (1)String s=new String(“new string”); (2)String s3=s1+s2; (3)String s3=s1-s2; (4)s1==s2; (5)s1>=s2;

C语言中二维字符数组

C语言中二维字符数组 C语言中二维字符数组的定义和初始化 一般来说,我们可能会希望定义一个二维字符数组并且在定义的时候就用一些字符串来初始化它。比如说: 始化就最简单不过了。其中,MAX_LENGTH是所有字符串中最大的长度。当然不能忘记'\0'了。 而定义一个字符二维数组,C也提供了简洁的方式,如果我不想统计字符串的长度, 一定要指定的,像这样写 char **testcase = ... 是不行的,不过肯定不行了,因为int *pt=3 也不行,呵呵,这两个例子是一个道理啊。 我觉得肯定是人都喜欢第二种初始化方法了,而且它还有一个优点,起码对喜欢用指针的同志来说是一个大优点。就是可以将这样定义的指针赋给一个二维指针,比如char **pointer = testcase; 想形式1的定义方法肯定不能这样赋值了。 不过非常非常值得注意的是,上面定义的两个指针,一个一维,一个二维,他们必须在const关键字上一致,意思就是说如果定义testcase前面加了const关键字,定义pointer时也必须加上,否则就会报错: error C2440: 'initializing' : cannot convert from 'char *[30]' to 'const char ** 在写这篇日志的过程中,我突然想到一个问题,就似乎利用上面的方法二初始化二维字符串数组之中,字符串是如何分布的呢?因为字符串的长度是不相等的,完全由编译器来计算,那么它是会按照最长的字符串来定制字符数组的长度,还是让每一个字符串数组都按照自身的大小来占据内存,靠'\0'来识别结尾呢? 二维字符串数组的初始化-动态内存分配 昨天在用FBS200指纹采集芯片采集到一个二维数组数据后,利用串口传输上来的数据是以十六进制的数据格式表示的二维矩阵,比如“FF”、“BD”、“5C”等等这样

相关主题
文本预览
相关文档 最新文档