C++ 字符串详解

字符串

字符串的定义

字符串是由零个或多个字符组成的有限序列,每个字符都用一个唯一的ASCII码表示。

字符串的常用操作

  • 字符串的长度strlen(s)函数可以获取字符串s的长度。
  • 字符串的拼接strcat(s1, s2)函数可以将字符串s2拼接到字符串s1的尾部。
  • 字符串的比较strcmp(s1, s2)函数可以比较字符串s1和s2的大小,如果s1<s2则返回-1,如果s1>s2则返回1,如果s1=s2则返回0。
  • 字符串的复制strcpy(s1, s2)函数可以将字符串s2复制到字符串s1。
  • 字符串的查找strchr(s, c)函数可以查找字符串s中第一个出现字符c的位置,如果没有找到则返回NULL。
  • 字符串的替换strstr(s1, s2)函数可以查找字符串s1中第一次出现字符串s2的位置,并将其替换为另一个字符串。

字符串的输入输出

  • 字符串的输入:scanf("%s", s)函数可以从标准输入中读取一个字符串。
  • 字符串的输出:printf("%s", s)函数可以将字符串s输出到标准输出。

字符串的内存管理

  • 字符串的动态分配:char *s = new char[n+1];语句可以动态分配n+1个字符的内存,并返回一个指向该内存的指针。
  • 字符串的释放:delete[] s;语句可以释放由new分配的内存。

定义和初始化

string s1;   //默认初始化,s1为空字符串
string s2 = s1;   //s2是s1的副本
string s3 = "hello";   //s3是字符串"hello"的副本
string s4(10, 'a');   //s4是10个字符'a'组成的字符串

字符串的操作

string s1,s2;

//1.输入
cin >> s1 ; //读取一行字符串,包括空格

getline(cin,s1); //读取一行字符串,包括换行符

cin.getline(s2,1000); //读取一行字符串,最多读取1000个字符


//2.输出
cout << s1 << endl;

printf("%s\n", s1.c_str()); //调用了c_str()函数,将string转换为char*类型,不能用printf直接输出string

puts(s1.c_str()); //调用了c_str()函数,将string转换为char*类型

//3.判断是否为空及长度
string s3 = "hello",s2;

cout << s3.empty() << endl; //输出0
cout << s2.empty() << endl; //输出1

cout << s3.size() << endl; //输出5,和s.length()相同

//4.拼接
string s4 = s1 + s2;//6种运算符都适用

//5.遍历

for(int i=0;i<s1.size();i++)
{
    cout << s1[i];
}

for(char c : s1) //c++11新特性,遍历string,基于范围for循环
{
    cout << c;
}
//修改值

//char可以改为auto,自动推导类型
for(char &c : s1) //c++11新特性,遍历string,基于引用for循环
{
    c = 'x';//修改字符串,输出结果为xxxxxxx
}   

例题

信息加密(——凯撒密码

凯撒密码是一种简单的替换加密技术,其中字母表中的每个字母在加密时都被替换为固定数目的位置之后(或之前)的字母。

题目描述

在传输信息的过程中,为了保证信息的安全,我们需要对原信息进行加密处理,形成加密信息,从而使得信息内容不会被监听者窃取。

现在给定一个字符串,对其进行加密处理。

加密的规则如下:

1.字符串中的小写字母,a加密为 b,b加密为 c,…,y加密为 z,z加密为 a。

2.字符串中的大写字母,A加密为 B,B加密为 C,…,Y加密为 Z,Z加密为 A。

3.字符串中的其他字符,不作处理。
请你输出加密后的字符串

输入格式

输入只有一行,包含一个字符串,注意字符串中可能包含空格。

输出格式

输出加密后的字符串。

数据范围

输入字符串的长度不超过 100

输入样例
Hello! How are you!
输出样例
Ifmmp! Guvf vf!
解题思路
if(c >= 'a' && c <= 'z') c = (c - 'a' + 1) % 26 + 'a';
  • c >= ‘a’ && c <= ‘z’:这个条件检查字符c是否是一个小写字母。
  • c - ‘a’:将小写字母c转换为从0开始的索引(即’a’变为0,'b’变为1,依此类推)。
  • (+ 1):将索引增加1,以实现凯撒密码的“向后移动一个位置”的效果。
  • (% 26):取模操作确保如果字母是’z’(索引为25),它会被转换回’a’(索引为0)。这是因为英文字母表有26个字母,所以使用26作为模数。
  • (+ ‘a’):将计算出的索引转换回对应的小写字母字符。
完整代码
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    string s;
    getline(cin, s);
    for(auto &c : s)
    {
        if(c >= 'a' && c <= 'z') c = (c - 'a' + 1) % 26 + 'a'; //先求出偏移量,再加上a
        if(c >= 'A' && c <= 'Z') c = (c - 'A' + 1) % 26 + 'A';
    }
    cout << s << endl;
    return 0;
}
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值