一、字符数组的输入与输出

  (第65课 采访报道) 教学视频

  大惊小怪报和小惊大怪报是两家全球性的报社,发表的文章全用英文。因风之巅小学的信息学社团开展得很出色,于是两家报社都派记者前来采访,大惊小怪报采访尼克,小惊大怪报采访格莱尔。他俩写好采访稿后,想用一个字符个数统计程序比一比谁的字符数多,于是向狐狸老师求助。

编程:输入一段英文,统计字符个数(包含空格)和'.'出现的次数,再输出这段英文(字符数量不超过 2000 个)。一段英文其类型为字符串,但我们也可以用一个字符数组来存放一个字符串中的字符。

  为了测定字符数组中字符串的实际长度, C++规定了以字符'\0'代表一个“字符串结束”,一个字符串常量,系统会自动在所有的字符后面加一个'\0'作为结束符,然后再把它存储在字符数组中。在程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。流程图如图所示:

#include <iostream>
#include <cstdio> //调用gets()和puts()函数
using namespace std;
int main()
{
char str[2000];
int i,num,numa;
num=numa=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{
num++;
if(str[i]=='.')
numa++;
}
puts(str);
cout<<"字符个数 :"<<num<<endl;
cout<<".的个数:"<<numa<<endl;
return 0;
}

运行结果:

Glair is an expert programmer.(回车)(格莱尔是个编程高手。)

Glair is an expert programmer.

字符个数:30

.的个数:1

  使用cin语句输入字符中时,遇到空格就结束,也就是说只能输入一个单词,而不能输入整行或包含空格的字符中,而用字符数组输入函数gets()输入字符串时可以包含空格。用cout语句可以输出包含空格的字符串,但字符数组输出函数puts()输出时会自动加上换行符,而cout语句不会。

小提示:需要注意的是,使用gets(str)和puts(str)时,不能把str定义为字符串string型,只能定义为字符数组,否则编译时会出错。

  C++允许一种特殊的字符常量,就是以一个“\”开头的字符序列,如'\0'代表字符串结束标志。这是一种“控制字符”,是不能在屏幕上显示的,在程序中无法用一个一般形式的字符表示,只能采用特殊形式来表示。以''开头的特殊字符,称为转义符。部分转义符如表所示:



注:

gets [gets]get string的缩写 字符数组输入(字符串输入)

puts [puts]put string的缩写 字符数组输出(字符串输出)

练习

(1)已知变量strl、str2定义为string型,经过下列( )赋值后表达式(strl<str2)的为0。(字符串比较规则:从第一个字符开始,依次向后比较,直到出现第一个不同的字符为止,以第一个不同字符ASCII的大小确定其字符串的大小。)

   A.str1="CD";          B.str1="HELLO";      C.str1="nike";            D.str1="8";
str2="CDDC"; str2="Hello"; str2="teacher"; str2="10+2";

(2)阅读程序写结果。

#include <iostream>
using namespace std;
int main()
{
char str[20];
cin>>str;
cout<<str;
return 0;
}

输入:How are you

输出:____________

(3)完善程序。

从键盘上输人一段英文句子,统计并输出句子中各个小写字母出现的次数(设输入的字符小于1000个)

#include <iostream>
#include <cstdio> //调用gets()和puts()函数
using namespace std;
int main()
{
char ch1[1000], ch2;
int num[26],i,k;
for(i=0;i<26;i++)
num[i]=0;
gets(chl);
i=0;
while(__________)
{
if(chl[i]>='a'&&ch1[i]<='z'>)

k=chl[i]-'a';
__________;
}
i++;
}
for(i=0;i<26;i++)
{
ch2='a'+i.
cout<<ch2<<':'<<num[i]<<" ";
if(i%5==4)cout <<endl;
}
retum 0;
}

二、字符串的输入与输出

  (第66课 恺撒加密术)教学视频

  加密术最早应用于古代战争。古罗马时期,恺撒大帝曾经使用密码来传息,它是一种替代密码,对于信件中的每个字母。会用它后面第i个字母代。

试编一程序,将输入的一段英文字符加密后输出,只加密字母,加密的规则是用原来字母后面的第1个字母代原来的字母,即用'b'代替'a',用'c'代替'b',······,用'a'代替'z',如图所示。



  当把字符直接定义为string型时,可以用getlinet()函数来读取字符串,如“getline(cin,strl)”,其中cin指的是输入流,strl是从输入流中读入的字符串存放的变量。加密时只要依次读取字符中每个字符进行加密即可,流程图如下两图所示。



#include <iostream>
#include <string>
using namespace std;
int main()
{
char s;
string str1,str2;
getline(cin,str1);
int i;
str2=""; //空串也是字符串
for(i=0;i<str1.size();i++) //str1.szie()返回str1中字符个数
{
s=str1[i];
if((s>='a'&&s<='z')||(s>='A'&&s<='Z'))
{
s++;
if((s>'Z'&&s<'a')||s>'z')
s-=26;
}
str2+=s;
}
cout<<str2;
return 0;
}

运行结果:

Nike is excellent!(尼克是个非优秀的孩子!)

Ojlf jt fydfmmfoul!

  恺撒加密术看起来非常巧妙,但随着计算机的诞生现已基本失效,因为它根本抵挡不住计算的枚举分析。当前计算机中使用比较广泛的加密算法有:RSA算法(公钥加密算法)、DES算法(又称“美国数据加密标准”,是一种对称加密算法)、IDEA算法(国际数据加密算法)。

英汉小词典

getline['getlain]从输人流中读人一行(字符串)

练习

(1)重要的文件箱一般都有六个数字的密码锁,每一格都可以选择0~9这10个数字,这样排出的六位数密码共有( )个。

   A.1万          B.10万               C100万                   D1000万

(2)阅读程序写运行结果。

#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
int i, ans;
i=0;
ans=1;
geline(cin,str);
while(i<str.size())
{
if(i>0)
if(str[i]==32&&str[i-1]!=32)
ans++;
i++;
}
cout<<ans<<endl;
return 0;
}

输入:How are you

输出:________________

(3)完善程序。

解密,输入一段加密后的英文字符解密成原码并输出(加密时用恺撒加密术,只加密字母,用它后面的第3个字母代替)。

如输人:gdgd2

则输出:dada2

#include <iostream>
#include <string>
using namespace std;
int main()
{
char s;
string strl,str2;
int i;
——————————;
for(i=0;i<str1.size();i++)
{
s=str1[i];
if((s>='a' && s<='z')||(s>='A'&&s<='Z'))
{
s-=3;
if((s>'Z'&&s<='a')||s<'A')
s+=26;
str2+=s;
}
else
__________;
}
cout<<str2;
return 0;
}

三、筛选法

  (第67课 快速求素数)教学视频

  筛选法是古希著名数学家埃托色尼提里的一种求素数的方法。如求100以内的素数,他采取的方法是,先在一张纸上按顺序写出1~100的全部整数,然后按下列步操作:先把1删除(1既不是素数也不是合数);读取当前剩下数中最小的数2,然后把2后面的是2的倍数的数删去;读取当前剩下数中最小的数3,然后把3后面的是3的倍数的数删去;该取当前剩下数中最小的数5、然后把5后面的是5的倍数的数删去······。以此类推,直到所有的数均删除或读攻。剩下未删除的数就是素数。

试编一程序,用选选法输出100以内所有的素数,并统计个数。

流程图如下图:



#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a[101];
int i,j,num;
for(i=2;i<=100;i++)
a[i]=true;
a[0]=a[1]=false;
i=1;
do
{
i++;
if(a[i])
{
for(j=2;j<=100/i;j++)
a[i*j]=false;
}
}while(i<100);
num=0;
for(i=1;i<=100;i++)
{
if(a[i])
{
cout<<setw(6)<<i;
num++;
if(num%10==0) cout<<endl;
}
}
cout<<endl;
cout<<"100以内素数个数:"<<num<<endl;
return 0;
}

练习

(1)计算机病毒的描述中正确的是()。

A.如果某人有感冒病毒,那他使用的计算机就有可能感染病毒,并最终发展成为计算机病毒。

B.若计算机在生产厂家组装时周围环境不好(有灰尘等),计算机就会有计算机病毒。

C.计算机病毒实质上是一段计算机程序。

D.计算机病毒只能通过计算机网络传播。

(2)阅读程序写运行结果。

#include <iostream>
using namespace std;
int main()
{
char s1[]="study", s2[]="student";
int i、ans=0;
for(i=0;sl[i]!='\0'&&s2[i]!='\';i++)
if(sl[i]==s2[i])
ans++;
cout<< ans<< endl;
return 0;
}

i,ans输出:_________________________

(3)完善程序。

尼克有一堆小于50根的胡卜,格莱尔帮他两根两根地数多1根,3根3根地数多2根,7根7根数多5根。请用筛选法算一算。尼克可有几根胡萝卜。

#include <iostream>
#include <cstring> //使用memset()函数设置数组元素的初始值
using namespace std;
int main()
{
bool a[50];
int i,b[3]={1, 2, 5};
memsetf(a,true, sizeof(a)); //数组a所有元素初始化为true
for(i=1; i<30;i++)
{
if(i%2!=b[0]) a[i]=false;
if(i%3!=b[1]) __________;
if(i%7!=b[2]) a[i]=false;
}
for(i=1; i<50;i++)
if(______) cout<<i<<endl;
return 0;
}

21C++数组(2)的更多相关文章

  1. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  2. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  3. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  4. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  5. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  6. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  7. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  8. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

  9. 掌握javascript中的最基础数据结构-----数组

    这是一篇<数据结构与算法javascript描述>的读书笔记.主要梳理了关于数组的知识.部分内容及源码来自原作. 书中第一章介绍了如何配置javascript运行环境:javascript ...

  10. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

随机推荐

  1. 安川MOTOMAN机器人NX100维修的注意事项

      安川MOTOMAN机器人NX100维修,操作人员安全注意事项 整个机器人的最大动作范围内均具有潜在的危险性. 为机器人工作的所有人员 (安全管理员.安装人员.操作人员和机器人维修人员) 必须时刻树 ...

  2. UE蓝图:准心锁定敌人实现,通过UI锁定敌人

    UI控件蓝图   1.让UI动起来 (1) 创建事件AimMoveEvent,接受参数Dir,即UI的移动方向 (2) *5是控制ui的移动速度(阅者可自行调整,建议提升为参数),CorssHairP ...

  3. 用 solon-ai 写个简单的 deepseek 程序(构建全国产 ai 智能体应用)

    用国产应用开发框架(及生态),对接国产 ai.构建全国产 ai 智能体应用. 1.先要申请个 apiKey 打开 https://www.deepseek.com 官网,申请个 apiKey .(一万 ...

  4. mybatis-generator 自动生成mybatis代码与xml

    一.pxm.xml中引入mybatis-generator并配置 在build节点下的plugins下添加org.mybatis.generator 示例代码如下: <?xml version= ...

  5. Linux系列:如何用 C#调用 C方法造成内存泄露

    一:背景 1. 讲故事 好久没写文章了,还是来写一点吧,今年准备多写一点 Linux平台上的东西,这篇从 C# 调用 C 这个例子开始.在 windows 平台上,我们常常在 C++ 代码中用 ext ...

  6. ChatBI≠NL2SQL:关于问数,聊聊我踩过的坑和一点感悟

    "如果说数据是新时代的石油,智能问数就是能让普通人也能操作的智能钻井平台." 这里是**AI粉嫩特攻队!** ,这段时间真的太忙了,不过放心,关于从零打造AI工具的coze实操下篇 ...

  7. mysql 导出数据的命令

    博客地址:https://www.cnblogs.com/zylyehuo/ # 1.数据库备份与恢复 # mysqldump命令用于备份数据库数据 [root@localhost ~]# mysql ...

  8. Linux如何从命令行卡死的进程中退出?

    Linux如何从命令行卡死的进程中退出? 不知道大家在使用Linux的时候,会不会遇到一些命令,有可能卡顿,有可能执行时间过长(比如使用 find 查找某个文件),这个时候我不想继续执行这个命令了,说 ...

  9. 深入理解 Java AQS 原理与 ReentrantLock 实现

    目录 一.AQS 简介 二.AQS 核心设计 2.1 核心组成部分 2.2 AQS 的工作原理 2.3 AQS 的关键方法 三.ReentrantLock 与 AQS 的关系 3.1 Reentran ...

  10. redis的作用:高性能和高并发

    一.高性能 假设这么个场景,你有个操作,一个请求过来,吭哧吭哧你各种乱七八糟操作mysql,半天查出来一个结果,耗时600ms.但是这个结果可能接下来几个小时都不会变了,或者变了也可以不用立即反馈给用 ...