1 / 16

第八章 字符串和向量

第八章 字符串和向量. 8.1 字符串的一种数组 类型 8.2 标准 string 类 8.3 向 量 小结与作业. 8.1 字符串的一种数组类型. C++ 提供两种字符串形式,一种就是以 '' 作结束标志的字符数组,称为 C 字符串 ;另一种是 string 类,是使用更方便的标准字符串。 1. 空字符 '' 注意与空格字符 ' ' 的区别,空字符是 C 字符串在字符数组中保存的一个特殊的符号,没有这个符号的字符数组,就不是 C 字符串,而只能是一个字符数组。. cs[0]. ‘ a’. cs[1]. ‘ b’. cs[2].

addo
Télécharger la présentation

第八章 字符串和向量

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第八章 字符串和向量 • 8.1 字符串的一种数组类型 • 8.2 标准string类 • 8.3 向 量 • 小结与作业

  2. 8.1 字符串的一种数组类型 • C++提供两种字符串形式,一种就是以'\0'作结束标志的字符数组,称为C字符串;另一种是string类,是使用更方便的标准字符串。 • 1.空字符'\0' • 注意与空格字符' '的区别,空字符是C字符串在字符数组中保存的一个特殊的符号,没有这个符号的字符数组,就不是C字符串,而只能是一个字符数组。

  3. cs[0] ‘a’ cs[1] ‘b’ cs[2] ‘c’ cs[3] ‘d’ cs[4] ‘\0’ 2.C字符串的定义与初始化 a • 定义一个能保存4个字符的C字符串cs如下: • char cs[5]; • 要给cs赋值为“abcd",可使用以下方法: • strcpy(cs,"abcd"); • 或是在定义的同时赋值: • char cs[5]="abcd"; cs

  4. 4、C字符串输入和输出 • (1)使用cout输出、 cin输入 • char a[80],b[80]; • cin>>a>>b; • cout<<a<<b<<"END OF OUTPUT\n"; • 演示上述程序段,讨论输入字符串含有空格会怎么样? 结论:cin不能接受带有空格的字符串,空格实际上是输入字符串的分界符!

  5. (2)使用流成员函数getline输入 • 使用流成员函数getline可以一次接受一行字符串,直至换行符,特别是可以接受带空格的字符串。 • 格式为:getline(C字符串变量,n) • 其中参数n决定最多接收字符个数 • 示例: • char a[80],ss[5]; • cin.getline(a,79); • cout<<“a字符串:”<<a<<endl; • cin.getline(ss,4); • cout<<“ss字符串:”<<ss<<endl;

  6. 5.C字符串应用示例——数字字符串转换数值 • 由数字字符构成的字符串,如“1234”,与数字1234(一千二百三十四)明显不一样,但在使用计算机中很容易混淆,编程处理前者到后者的转换问题。其实C++的cstdlib库中提供有atoi(数字字串)函数,他可以把数字字串转化为数值。 • 例8.1 • 输入一个字串,将其中的非数字字符剔除,其余的数字字符转化为数值。 • 此问题可分为两部分: • 一是接收字符串,并且屏蔽非数字字符,保存在一个字符串中; • 二是将数字字串转换成整数数值。

  7. 任务一:接受数字字符串 • void read_and_clean(int&n) • { • const int ARRAY_SIZE=6; char digit_string[ARRAY_SIZE]; • char next; • cin.get(next); int index=0; • while(next!='\n') • { • if(isdigit(next)&&(index<ARRAY_SIZE-1)) • { digit_string[index]=next; index++; } • cin.get(next); • } • digit_string[index]='\0'; • n=atoi(digit_string); • }

  8. 任务二:将数字字串转换成整数 • 使用库函数atoi(char cs[]) • 也可以自编函数atoi1(char cs[])如下: • int atoi1(char ds[]) • { • int i,n,s=0; • n=strlen(ds); • for(i=0;i<n;i++) • { s=10*s+ds[i]-48; } • return s; • } 调试程序,注意:中文输入,非数字字符出现的位置变化

  9. 8.2 标准string类 • string类型是ISOC++标准规定的类,就像int、char、float一样使用。注意,头文件包含<string> • 1.连接、赋值的运算符号化 • string字符串可以直接使用“=”赋值,直接使用“+”连接。例:

  10. string类的成员函数及运算符 • 假定定义:string str,str1,str2;int pos,len; • 则有以下函数可以使用: • (1)取子字符串:str.substr(pos,len) • (2)求串长: str.length() • (3)判串空: str.empty() • (4)插入子串: str.insert(pos,str2) • (5)删除字串: str.remove(pos,len) • (6)查找字串: str.find(str1) • (7)定位查找字串: str.find(str1,pos) • (8)定位查找串中字符:str.find_first_of(str1,pos) • (9)查找不属于: str.find_first_not_of(str1,pos) • (10)赋值、连接、比较等运算符号化: • =、+、==、<、>、<=、>=、!=

  11. C字符串与string字符串的关系 • C++认定string类为标准字符串,并且为其提供了丰富的成员函数,一般来说,C++程序员青睐string类字符串,C字符串是为C语言保留的,若要将string字符串转换成C字符串,可使用string的成员函数: • c_str() • 如有定义:string str; • 则:str.c_str()就是将string字符串转换成的C字符串。

  12. 编程实例:回文测试 • 所谓回文就是顺读倒读一样的字符串,如“abcba”、“abccba”等,某些中文回文对联更使人拍案叫绝: • “上海自来水来自海上”、“北京输油管油输京北” • “雾锁山头山锁雾”、“天连水尾水连天”、 • “香山碧云寺云碧山香”、“ 黄山落叶松叶落山黄” • 给出一个字符串,编写程序判断其是否为回文,可使用如下算法: • (1) 输入一个字符串; • (2)求出其长度,找出其对折中心位置; • (3)让i从0开始循环到中心位置,依次比较第i个字符与其对折对应的字符是否相同,有不相同的就不是回文,退出循环;循环结束,全相同,就是回文。

  13. 程序核心代码 • int i,len,mid; bool yesno=true; string str,str1; • cout<<"请输入一个英文字符串:\n"; getline(cin,str); • str1=remove_punct(str); • len=str1.length(); mid=len/2; • for(i=0;i<=mid;i++) • { if(tolower(str1[i])!=tolower(str1[len-1-i])) • {yesno=false;break;} } • if(yesno) • cout<<"字符串\""<<str<<"\"是一个回文。\n"; • else • cout<<"字符串\""<<str<<"\"不是一个回文。\n";

  14. 8.3 向量 • 1.向量与数组的关系 • 用途一样,只是向量的长度在程序运行时可以改变。 • 2.向量定义 • vector <int> v;就定义了一个一整数为元素的向量v • 3.向量初始化 • 新定义的向量一般是个空向量,不能像数组一样直接使用其元素v[i],必须使用成员函数push_back()添加元素并赋初值,如给上述定义的v添加3个元素并赋值: • v.push_back(0); • v.push_bcak(1); • v.push_bcak(2);

  15. 向量示例 • #include<iostream> • #include<vector> • using namespace std; • main() • { vector<int>v; • cout<<"请输入一个正数序列,以负数作结束标志:\n"; • int next;cin>>next; • while(next>0) • { v.push_back(next);cout<<next<<"加入"; • cout<<"向量长度为:"<<v.size()<<endl; • cin>>next;} • cout<<"你输入的序列为:\n"; • for(int i=0;i<v.size();i++)cout<<v[i]<<" "; • cout<<endl;system("pause");}

  16. 小结与作业 • 字符串是十分重要的数据组合形式 • 两种类型:C字符串、string字符串 • 注意两种类型的字符串的使用方法的区别 • 向量与数组类似,但它是动态的 • 作业:P331,编程项目4、12

More Related