C程序中的字符串(Week 11)

字符数组

  • 所有的字符串,都是以\0结尾

  • 只能在数组定义并初始化的时候:char c[6] = "China";

  • 不能用赋值语句将一个字符串常量字符数组直接赋给另一个字符数组

  • 可以利用二维字符数组存储多个字符串

字符/字符数组/字符串的输入与输出

输入的过程

  • 输入缓冲区

    输入的时候会有一个指针标定我们读取到哪里(缓冲区指针)

  • 用cin输入数据

    连续输入的情况 while(cin>>i)

一个字符的输入和输出

  • 方法一:直接用cin输入字符(cin会把空格和回车当作数据之间的间隔符号,不认为其本身是数据
  • 方法二:从cin.get()函数输入字符
    • 用于读入一个字符
    • 可无参数or一个参数(char)
    • 该方法不会忽略空格和回车,而是当作普通字符处理
  • 方法三:用cin.get(char)输入字符
    • 读取一个值赋给char
    • 该方法不会忽略空格和回车,而是当作普通字符处理
  • 方法四:用getchar()输入字符
    • 该方法不会跳过任何字符,包括结束符。

一串字符的输出

  • 用cout输出字符数组:在遇到\0后中止

一串字符的输入

  • 方法一:直接用cin输入字符串(cin会把空格和回车当作字符串之间的间隔符号
  • 方法二:用cin.get()函数输入
    • 有3个参数的get函数 cin.get(ch,10,'\n'); //读取10-1个字符(包含空格)赋给ch,如果在读取10-1个字符之前碰到了设定的中止字符,则结束。读取成功返回,失败返回
  • 方法三:用cin.getline()函数输入(参数同上)
    • getline和get的区别

      • getline遇到终止标志字符时结束,缓冲区指针移到终止标志字符之后
      • get遇到终止字符是停止读取,指针不移动
      • cin.getline更常用,因为中止字符通常都是换行符,因此getline比较方便
#include<iostream>
using namespace std;
int main()
{
char a[10][10];
int n = 0;
cin >> n;
cin.get(); //添加一条语句,“拿走”上一句话指针停止在的换行符
for(int i = 0; i < n; i++)
cin.getline(a[i],10);
for(int i = 0; i < n; i++)
cout<<a[i]<<endl;
return 0;
}

字符串应用

例1 字符串加密

  • 问题

    • 输入一个字符串,把每个字符变成它的后续字符,然后输出变换后的字符,要求能够接受连续输入。
  • 思路

    • 读入字符串(想一下以什么方式输入?)
    • 从字符头到尾循环:
      • 是‘Z'/‘z’则直接赋值’A'/‘a’,跳过以下步骤
      • 空格不做处理,跳过以下步骤
      • 其他字符++
    • 输出新字符串
    #include<iostream>
    using namespace std;
    int main()
    {
    char str[200];
    while(cin.getline(str,200))
    {
    for(int i = 0; str[i] !='/0';i++)
    {
    if(str[i] == 'Z')
    {
    str[i] = 'A';
    continue;
    }
    if(str[i] == 'z')
    {
    str[i] = 'a';
    continue;
    }
    if(str[i] == ' ')
    continue;
    str[i]++;
    }
    cout<<str<<endl;
    }
    return 0;
    }

例2 字符串链接

  • 问题

    • 输入两个字符串,将其中较短的串接到较长的串的后面
  • 要求

    • 不使用系统函数strcat
    • 每个输入的串的长度不超过20
  • 思路

    • 定义: char str1[40],str2[40]; cin.getline(str1,20);cin.getline(str2,20);

    • 计算长度: for(len1 = 0; str1[len1]!='\0';len1++);for(len2 = 0; str2[len2]!='\0';len2++);

    • 拼接:第一个串的下标指向最后一个元素之后,第二个串的下标指向第一个元素

      for(len2 = 0; str1[len2]!='\0';len2++);

      ​ str1[len1++] = str2[len2];

      ​ str1[len1]='/0'; //加上\0就变成了一个字符串

#include<iostream>
using namespace std;
int main()
{
int len1,len2;char str1[40],str2[40];
cin.getline(str1,20);cin.getline(str2,20);
for(len1=0;str1[len1]!='\0';len1++);
for(len2=0;str2[len2]!='\0';len2++);
if(len1 >= len2)
{
for(len2 = 0; str2[len2]!='\0';len2++)
str1[len1++] = str2[len2];
str1[len1] = '\0';
}
else
{
for(len1 = 0; str2[len1]!='\0';len1++)
str2[len2++] = str1[len1];
str2[len2] = '\0';
}
cout<<str1<<endl;
cout<<str2<<endl;
return 0;
}

例3 统计单词数

  • 问题

    • 输入一个英文句子(不超过80个字母),统计其中有多少个单词,单词之间用空格分开
#include<iostream>
using namespace std;
int main()
{
char str[80];
int num = 0, flag = 0;
cin.getline(str,80);
for(int i = 0; str[i]!='\0';i++)
{
if(str[i] == ' ')
flag = 0;
else if(flag == 0)
{
flag = 1;
num++;
}
}
cout<<"字符串中有"<<num<<"个单词"<<endl;
return 0;
}

Coursera课程笔记----计算导论与C语言基础----Week 11的更多相关文章

  1. Coursera课程笔记----计算导论与C语言基础----Week 6

    理性认识C程序 导论(Week 6) 明确学习进度 讲课内容 感性➡️理性➡️函数➡️指针等 作业练习 初级阶段 ➡️正常作业练习 C语言的由来 程序设计语言的分类 低级语言之机器语言 0010101 ...

  2. Coursera课程笔记----计算导论与C语言基础----Week 8

    C语言中的运算成分(Week 8) 赋值运算符 "="赋值运算符 给赋值号左边的变量赋予数值 在变量定义的同时可以为变量赋初值 要点一:两面类型不同 若=两边的类型不一致,赋值时要 ...

  3. Coursera课程笔记----计算导论与C语言基础----Week 7

    C语言中的数据成分(Week7) 内存 把内存想象成长带,带子上有许多方格,每个方格有8位(8bit) 2^10 = 1024 1B = 8 b 1KB = 1024Byte MB.GB.TB.PB- ...

  4. Coursera课程笔记----计算导论与C语言基础----Week 4

    感性认识计算机程序(Week 4) 引入 编程序 = 给计算机设计好运行步骤 程序 = 人们用来告诉计算机应该做什么的东西 问题➡️该告诉计算机什么?用什么形式告诉? 如果要创造一门"程序设 ...

  5. Coursera课程笔记----计算导论与C语言基础----Week 2

    计算机的历史与未来(Week 2) 计算机历史 早期计算机:手工计算器➡️机械计算器➡️计算机原型 现代计算机:电子管计算机➡️晶体管计算机➡️集成电路计算机➡️超大规模集成电路 早期的手工计算辅助工 ...

  6. Coursera课程笔记----计算导论与C语言基础----Week 9

    C语言中的控制成分(Week 9) 计算机程序的基本结构 任何具有单入口单出口的程序,都可以用顺序结构.分支结构.循环结构来表达 分支语句 在执行if语句前,先对表达式求解 if()内可以是任意的数值 ...

  7. Coursera课程笔记----计算导论与C语言基础----Week 3

    存储程序式计算机 冯·诺伊曼式计算机 "关于EDVAC的报告草案" 组成:控制器(协调工作).运算器(算数&逻辑运算).存储器(存储操作信息和中间结果).输入设备.输出设备 ...

  8. Coursera课程笔记----计算导论与C语言基础----Week 1

    计算机的基本原理(Week 1) 第一次数学危机 公元前500年,毕达哥拉斯学派,他们相信数是万物的本源:一切数均可表示成整数或者整数之比 然而毕达哥拉斯证明了勾股定理,某些直角三角形的三边比不能用整 ...

  9. Coursera课程笔记----计算导论与C语言基础----Week 12

    期末编程测试(Week 12) Quiz1 判断闰年 #include <iostream> using namespace std; int main() { int year; cin ...

随机推荐

  1. CentOS7.5 使用Docker部署Jumpserver

    1.环境准备 # 查看系统版本 $ cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) # 查看内核版本 $ uname -a L ...

  2. GeoGebra重复手段实现

    1.自定义工具部分可以在网上搜一些别人做的工具,主要是把自己经常做的一些任务做成工具,减少重复过程 2.列表部分的简单操作如图所示,实现对三个点的多项式拟合 3.通过序列指令格式可以做一个好玩的效果, ...

  3. Python—一个简单搜索引擎索引库

    因为课业要求,搭建一个简单的搜索引擎,找了一些相关资料并进行了部分优化(坑有点多) 一.数据 数据是网络上爬取的旅游相关的攻略页面 这个是travels表,在索引中主要用到id和url两个字段. 页面 ...

  4. BUG 测试计划

       性能追求 目前状况 测试标准 APP平稳运行,无crush现象   快速下拉翻页时,崩溃退出     要求多人使用,均流畅无异常退出方可               页面的放大缩小不会造成页面显 ...

  5. Spring Data REST不完全指南(二)

    上一篇文章介绍了Spring Data REST的功能及特征,以及演示了如何在项目中引入Spring Data REST并简单地启动演示了Spring Data REST项目.在本文中,我们将深入了解 ...

  6. SQLyog-证书密钥

    * 用户名: + 随意填写 * 秘钥: + b70d7f66-dac2-4462-bf51-c4e9347da763 + ccbfc13e-c31d-42ce-8939-3c7e63ed5417 + ...

  7. pytorch中tensor张量的创建

    import torch import numpy as np print(torch.tensor([1,2,3])) print(torch.tensor(np.arange(15).reshap ...

  8. python实现秒杀商品的微信自动提醒功能(附代码)

    技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的 ...

  9. Jetson AGX Xavier更换apt-get源

    使用apt-get安装时,会很慢,更换了国内的源后,就可以解决这个问题了. 1. 备份sources.list文件 sudo cp /etc/apt/sources.list /etc/apt/sou ...

  10. linux下批量删除文件

    1. 在linux批量删除多级目录下同一格式的文件,可采用find + exec命令组合: 如在删除old目录下的,所有子目录中,后缀为.l的文件方法为: find old -type f -name ...