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. (一) Mybatis源码分析-解析器模块

    Mybatis源码分析-解析器模块 原创-转载请说明出处 1. 解析器模块的作用 对XPath进行封装,为mybatis-config.xml配置文件以及映射文件提供支持 为处理动态 SQL 语句中的 ...

  2. Python中有许多HTTP客户端,但使用最广泛且最容易的是requests

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:北京尚脑软件测试 PS:如有需要Python学习资料的小伙伴可以加点击 ...

  3. 8行代码帮你python建立UDP通信

    首先我们要搭建一个UDP通信,首先我们就要知道什么UDP: UDP用户数据报传输协议,它位于TCP/IP协议的传输层,是一种无连接的协议,它发送的报文不能确定是否完整地到达了另外一端.UDP广泛应用于 ...

  4. HPU第一次团队赛

    D. Tom的战力问题 Tom被斯派克揍了TAT.Tom下定决心要战胜斯派克.但是在战胜最强的斯派克之前,Tom要先打败其他的狗.为此,他打算先收集一下信息.现在Tom在了得到了一些关于战斗力的小道消 ...

  5. Jmeter系列(2)- Jmeter工具介绍、Jmeter安装目录介绍、Jmeter面板介绍

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html Jmeter支持哪些测试场景? Jme ...

  6. php +go关键字实现协程

    来源: https://studygolang.com/articles/17631?fr=sidebar 今天在知乎浏览时忽然发现了一个有趣的东西,php竟然可以实现协程的实现,而且还是通过go关键 ...

  7. Akka 集群单例Cluster Singleton

    一.简介 集群中Cluster Singleton 集群中有而只一个单例,可应用于集群全局调控,单一运算决策,中央命名服务或中央路由等应用场景 二.依赖 dependencies { compile ...

  8. Kubernetes 命令行工具之kubctl

    目录 1.何为kubectl 2.Kubectl基本使用 2.1.命令补全 2.2.快速查找资源 2.3.使用自定义输出格式 3.陈述式管理资源 3.1.管理namespace资源 3.2.管理Dep ...

  9. 查看 Nginx 的日志目录

    即便是 docker 容器,对应的目录也是一样的 > /var/log/nginx/xxx.log

  10. FluentAspects -- 基于 Fluent API 的 Aop

    FluentAspects -- 基于 Fluent API 的 Aop Intro 上次我们做了一个简单的 AOP 实现示例,但是实现起来主要是基于 Attribute 来做的,对于代码的侵入性太强 ...