C和C++的区别(6)字符串

news/2024/11/8 17:43:41/

目录

一,字符

二,C语言字符串

1,字符串的表示

2,输入输出

3,常用函数

三,string类

1,定义,初始化,输入输出


一,字符

类型:char

输入:getchar

输出:putchar

示例:

#include <stdio.h>void main()
{char ch;while (ch = getchar()){if (ch == EOF)break;printf("%d", ch);putchar(ch);}return;
}

运行结果:(8行)

a^Zb
97a
26
a
97a
10^Z

解释:

输入a^Zb并回车,输入了2个字符a和^Z,再输入a并回车,输入了2个字符a和换行符,再输入^Z程序结束

注1:

'\0'的ASCII码是0,‘^A’ - '^Z' 的ASCII码是1-26,其中换行符'\n'的是10,'^Z'的是26,但是当输入缓冲区为空时'^Z'出现在'\n'之后时,'^Z'的ASCII码是-1,表示文件结尾end of file

注2:

EOF是常量-1,OJ输入输出经常用EOF来控制。

注3:

10号'\n'和26号'^Z'都是getchar的截断,输入一行字符串,getchar只能读取到第一个'\n'或'^Z',后面如果还有就丢弃

二,C语言字符串

1,字符串的表示

c语言中,字符串用char数组表示,字符串末尾加上'\0'表示结束

2,输入输出

输入:gets

输出:puts

示例:

#include <stdio.h>
#include<string.h>void main()
{char str[]="abcde";puts(str);gets(str);printf("%d\n", strlen(str));puts(str);return;
}

运行结果1:(4行)

abcde
^Za
5
abcde

运行结果2:(5行)
 

abcde
a^Zb2
a?

可以看出,换行符和^Z都是gets函数的截断,区别在于

换行符会被gets读取并丢弃,而gets对^Z的处理和getchar一样,缓冲区为空时就是-1号字符,缓冲区不为空时就是26号字符

3,常用函数

(1)strcat函数——字符串连接

string catenate字符串连接

示例:

#include <stdio.h>
#include<string.h>void main()
{char str1[10] = "ab";char str2[] = "cd";printf("%d %d\n", strlen(str1), strlen(str2));strcat(str1, str2);printf("%d %d\n", strlen(str1), strlen(str2));printf("%s %s", str1, str2);return;
}

运行结果:

2 2
4 2
abcd cd

strcat(str1, str2)函数就是把str2复制到str1后面

(2)strcpy和strncpy函数——字符串复制

strcpy(str1,str2)把str2复制到str1的位置

strncpy(str1,str2,n)把str2的前n个字符复制到str1的位置

(3)strcmp函数——字符串比较

strcmp(str1,str2)是按照字典序比较,返回值>0,=0,<0分别表示str1>str2,str1==str2,str1<str2

(4)strlen和sizeof——字符串长度

sizeof是关键字,计算的是数组长度

strlen是函数,计算的是字符串中字符数目,不包括'\0'

(5)strlwr和strupr函数——字符串大小写

strlwr是把大写字母换成小写字母

strupr是把小写字母换成大写字母

总结:C-风格字符串输入——cin或者getline或者get,cin是以空格或换行结束,getline和get都是读取一行。

getline函数会读取并丢弃换行符,而get函数如果带参会保留换行符在输入缓冲区,get函数如果不带参可以读取并丢弃换行符。

三,string类

 

1,定义,初始化,输入输出

#include<iostream>
#include<string>
using namespace std;int main()
{string str="abc";cin>>str;cout<<str;return 0;
}

2,string的赋值、计算长度、翻转

#include<iostream>
#include<string>
using namespace std;int main()
{string str1="abc";string str2=str1;reverse(str2.begin(),str2.end());cout<<str1<<" "<<str1.length()<<" "<<str2;return 0;
}

3,从string中取字符

可以用数组形式,也可以用迭代器形式

#include<iostream>
#include<string>
using namespace std;int main()
{string str="abcde";cout<<str[2]; string::iterator it=str.begin();cout<<*it;it=str.end()-1;cout<<*it;return 0;
}

输出:

cae

4,string的比较、连接

#include<iostream>
#include<string>
using namespace std;int main()
{string str1="abc",str2="def",str3="def";if(str1<str2)cout<<"str1<str2\n";if(str2==str3)cout<<"str2=str3\n";cout<<str1+str2;return 0;
}

输出:

str1<str2
str2=str3
abcdef

5,string转字符数组

#include<iostream>
#include<string>
using namespace std;int main()
{string str="abc";const char *p1=str.c_str();char *p2=new char[20];strcpy(p2,p1);cout<<p2;return 0;
}

6,string中查找字符

#include<iostream>
#include<string>
using namespace std;int main()
{string str="abca";cout<<str.find('a')<<" "<<str.find('a',2);return 0;
}

输出:

0 3

附上c++课本上的string常用函数:


http://www.ppmy.cn/news/1031502.html

相关文章

qt实现截取屏幕

利用qt提供的函数实现截屏: QPixmap QPixmap::grabWindow(WID window, int x 0, int y 0, int width -1, int height -1) window: 表示窗口ID号 x、y: 截取屏幕的其实坐标 width:截取屏幕的宽度 -1表示当前窗口宽度 height:截取屏幕的高度 -1表示当前窗口高度 示例…

背上沉重的书包准备面试之react篇

目录 react特性&#xff1f; react生命周期&#xff1f; state和props区别 react中setState执行机制&#xff1f; 在react类组件形式中&#xff0c;setState第二个参数的作用&#xff1f; react事件机制&#xff1f; react事件绑定方式有哪些&#xff1f; react组件之间…

找不到mfc140u.dll怎么办?mfc140u.dll丢失怎样修复?简单三招搞定

最近我遇到了一个问题&#xff0c;发现我的电脑上出现了mfc140u.dll文件丢失的错误提示。这个错误导致一些应用程序无法正常运行&#xff0c;让我感到非常困扰。经过一番研究和尝试&#xff0c;我终于成功修复了这个问题&#xff0c;并从中总结出了一些心得。 mfc140u.dll丢失原…

write javaBean error, fastjson version 1.2.76

fastjson JSON.toJSONString 报错&#xff1a; > [0] JavaBeanSerializer.java->541: com.alibaba.fastjson.serializer.JavaBeanSerializer->write()> [1] JavaBeanSerializer.java->154: com.alibaba.fastjson.serializer.JavaBeanSerializer->write()>…

考公-判断推理-组合排列

例题 例题 例题 代入法 例题 排除法 例题

[PyTorch][chapter 49][创建自己的数据集 1]

前言&#xff1a; 后面几章主要利用DataSet 创建自己的数据集&#xff0c;实现建模&#xff0c; 训练&#xff0c;迁移等功能。 目录: pokemon 数据集深度学习工程步骤 一 pokemon 数据集介绍 1.1 pokemon: 数据集地址&#xff1a; 百度网盘路径: https://pan.baidu.com/s/1…

黑马项目一阶段面试 项目介绍篇

我完成了一个外卖项目&#xff0c;名叫苍穹外卖&#xff0c;是跟着黑马程序员的课程来自己动手写的。 项目基本实现了外卖客户端、商家端的后端完整业务。 商家端分为员工管理、文件上传、菜品管理、分类管理、套餐管理、店铺营业状态、订单下单派送等的管理、数据统计等&…

Yum 部署K8S集群

目录 1、准备环境 &#xff08;温馨提示&#xff1a;尽量一次完成集群&#xff09; 2.安装master节点 3、安装k8s-master上的node 4、安装配置k8s-node1节点 5、安装k8s-node2节点 6、为所有node节点配置flannel网络 7、配置docker开启加载防火墙规则允许转发数据 一. 环…