C++第十课字符串_第1页
C++第十课字符串_第2页
C++第十课字符串_第3页
C++第十课字符串_第4页
C++第十课字符串_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10课字符串1

例charch[5]={‘H’,’e’,’l’,’l’,’o’};ch[0]Hello逐个字符赋值ch[1]ch[2]ch[3]ch[4]例charch[5]={‘B’,’o’,’y’};ch[0]Boy\0\0逐个字符赋值ch[1]ch[2]ch[3]ch[4]

例charch[6]={“Hello”};charch[6]=“Hello”;charch[]=“Hello”;用字符串常量ch[0]Helloch[1]ch[2]ch[3]ch[4]\0ch[5]

例charch[5]=“Boy”;ch[0]Boy\0\0用字符串常量ch[1]ch[2]ch[3]ch[4]字符数组P221定义字符数组的初始化逐个字符赋值用字符串常量字符数组的引用例charc[10],ch[3][4];2字符数组的输入与输出chara[100];cin>>a;cout<<a[2];输入:abc

输出:c输入:abc

输出:空格?因为这时a数组只能取“a”,空格后面的不能读入。因此,字符数组的读入与整数类似,也是以空格作为分隔的。上例中如果改成cin>>a>>b;则b数组的值是“bc”3自动跳过空格程序中有下列语句:

charstr1[5],str2[5],str3[5];

cin>>str1>>str2>>str3;

运行时输入数据:

Howareyou?内存中变量状态如下:

str1:How\0str2:are\0str3:you?\044空格初始化输入#include<iostream>usingnamespacestd;intmain(){charc[10]={'I','','a','m','','a','','b','o','y'};

inti;for(i=0;i<10;i++)

cout<<c[i];//或者不用循环,直接

cout<<c;return0;}运行结果:

Iamaboy5charc[10];

inti;for(i=0;i<10;i++)

c[i]=getchar();//一次只能读一个变量

cout<<c;注意:必须先知道长度,或有控制标志。头文件中必须有:#include<cstdlib>输入:123456789输出:123456789空格输入(知道长度)6空格输入(不知长度)例2:输入一行字符,不超过200个,包含若干个单词。约定相邻两个单词用空格隔开,编程统计单词的个数。样例:输入:Todayis

aniceday输出:5输入的不知道长度,只能使用字符串输入。#include<cstring>头文件中先打开字符串定义stringa;//a长度不限,与P语言不一样

cin>>a;//a[0]是输入的第一个字符但只能读入第一个单词,直接读入也是以空格作为分隔。7#include<iostream>usingnamespacestd;#include<cstring>intmain(){stringst;

inti,L,num;

getline(cin,st);//getling

读入一行字符串,包含空格

i=0;L=st.length();num=0;while(i<L){while(st[i]=='')i++;if(i<L)num++;while(st[i]!=''&&i<L)i++;}

cout<<num<<endl;return0;}8更快的方法#include<iostream>#include<cstring>usingnamespacestd;intnum;intmain(){stringst;while(cin>>st)num++;

cout<<num<<endl;return0;}文件操作的时候正常读。键盘输入的时候以ctrl+Z结束9string的操作加法:stringst;

getline(cin,st);

st=’’+st;//st前面多一个空格

st=st+st;//复制一遍但st=‘abc’+st;是错误的,可以写成st=“abc”+st;操作作用返回值例子字符串.length()求字符串的长度整型s=“123456789”;l=s.length();{l的值为9}字符串.substr(w,k)复制字符串中从w开始的k位字符串s=“123456789”;s1=s.substr(0,5);{s1的值为“12345”}10操作作用返回值例子字符串.find(str)在字符串中查找字符串str的位置整型s=“123456789”;l=s.find(“34”);{l的值为2}字符串.swap(str)将字符串与str交换无s=“123”;s1=“456”s.swap(s1);{s1的值为“123”,s的值是“456”}插入字符串.insert(x,str)strings1="12",s2="345";s1.insert(1,s2);//从s1的1号位开始插入s2

cout<<s1;//s2=“13452”11删除字符串.erase(x,n)从x位开始的n个字符

strings1="12345";s1.erase(2,2);//从2号位开始的两个字符

cout<<s1;//输出12512字符数组转字符串直接转chara[100];stringb;b=a;13字符串转字符数组不可直接转,用循环转一下chara[100];stringb;for(i=0;i<b.length();i++)a[i]=b[i];14将string转成int

st:string;

cin>>st;方法一:

inti=atoi(st.c_str());方法二:sscanf(st.c_str(),"%d",&i);15字符数组转成整数#include<cstdio>#include<cstring>#include<iostream>usingnamespacestd;intmain(){chars1[100]="111",s2[100]="222";int

a,b;sscanf(s1,"%d",&a);//sscanf()的作用是从字符数组中读入sscanf(s2,"%d",&b); cout<<a+b<<endl;return0;}输出:333转实数的方法:doublec;sscanf(s1,"%lf",&c);16string转int

通用程序法#include<iostrseam>#include<cstring>usingnamespacestd;intmain(){stringst;

int

i,j,n,s=0;

cin>>st;j=st.length();for(i=0;i<j;i++){n=st[i]-48;s=s*10+n;}

cout<<s;return0;}17将int

转成string,相当麻烦#include<iostream>#include<cstring>#include<cstdlib>#include<strstream>usingnamespacestd;intmain(){strstream

ss;stringst;

intn;

cin>>n;

ss<<n;

ss>>st;

cout<<st<<endl;return0;}18int转string通用程序法

stringst=“”;//初始化,取空

intn;

cin>>n;charch;//ch用来保存每位数字,转成字符型

while(n>0){

inta=n%10;//分解出个位数字

n=n/10;

ch=48+a;//ch取数字的ASCII码,自动转成字符

st=ch+st;}

cout<<st;19整数转字符型数组和字符串#include<cstdio>#include<string>#include<iostream>usingnamespacestd;intmain(){chars1[100];chars2[100];stringst1,st2;inta=123,b=456;sprintf(s1,"%d",a);//产生"123"存在字符型数组中sprintf(s2,"%d",b);//产生"456" st1=s1;st2=s2; //字符型数组转到字符串中cout<<st1+st2<<endl;return0;}输出:123456

整数与字符型数组能直接转换20题一:问题:加法算式(P1211)输入:仅一行,符合格式A+B,0<=A,B<=60000(A,B为整数)

文件不含空格,数字开头无多余的零。输出:仅一行,即A与B的和。样例:输入

113+355

输出

468上机作业思路:1、字符串输入。2、找到加号的位置。3、将加号左边、右边分解出来。4、输出加法的值。21另一巧妙的方法scanf(“%d+%d”,&a,&b);printf(“%d”,a+b);22题二数字反转

(NOIP2011初中组第1题)P1100

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。【输入】共1行,一个整数N。【输出】一个整数,表示反转后的新数。【样例1】reverse.in

123reverse.out321【样例2】Reverse.in-380reverse.out-83【数据范围】-1,000,000,000≤N≤1,000,000,000。提示:先处理负数。23题三:数字统计(NOIP2010初中组第1题)P1113【问题描述】

请统计某个给定范围L---R的所有整数中,数字2出现的次数。比如给定范围2---22,数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数字2在该范围内一共出现了6次。【输入】共1行,为两个正整数L和R,之间用一个空格隔开。【输出】共1行,表示数字2出现的次数。【样例】two.in

222two.out6【数据范围】1≤L≤R≤10000。24题四:变态的等式P1212

输入一行一个等式,要求在左边插入一个加号,使等式成立,如果没有答案则输出“No"(不含引号).样例:输入

1122=33

输出

11+22=33数据范围:所有的数不超过2.1*10^925题五.统计单词数

P1107

给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。【输入】输入共2行。第1行为一个字符串,其中只含字母,表示给定单词;第2行为一个字符串,其中只可能包含字母和空格,表示给定的文章。【输出】只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开,分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字母在文章中的位置,位置从0开始);如果单词在文章中没有出现,则直接输出一个整数-1。【样例1】stat.in

Totobeornottobeisaquestionstat.out20【样例1说明】输出结果表示给定的单词To在文章中出现两次,第一次出现的位置为0。【样例2】stat.in

toDidtheOttomanEmpireloseitspoweratthattimestat.out-1【样例2说明】表示给定的单词to在文章中没有出现,输出整数-1。【数据范围】1≤单词长度≤10。1≤文章长度≤1,000,000。算法:1、输入第一行,将大写字母转成小写字母。2、输入第二行,将大写字母转成小写字母。3、将第二行前面与后面插入一个空格。4、查找第二行中第一行出现的次数。

(1)相同的单词必须前后均是空格。(2)统计相同的个数,还要记下第一次出现的位置。5、输出26字符串数组字符串相当于一维数组

stringst;st=“abc”;

则有数组st,st[0]=‘a’st[1]=‘b’st[2]=‘c’字符串数组相当于二维数组

stringst[10];st[0]=“ab”;st[1]=“cd”;st[2]=“ef”;

请问:字符’c’的表示方法是什么?st[1][0]=‘c’27

求最大数设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613程序输入:nn个数程序输出:联接成的多位数样例:输入:

313312343

输出:

34331213

28#include<iostream>#include<cstring>usingnamespacestd;intmain(){

intn;strings[20];

cin>>n;for(inti=1;i<=n;i++)

cin>>s[i];for(inti=1;i<=n-1;i++)for(intj=i+1;j<=n;j++)if(s[i]+s[j]<s[j]+s[i])

swap(s[i],s[j]);for(inti=1;i<=n;i++)

cout<<s[i];return0;}29题六:学生成绩(P1223)【问题描述】给出若干

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论