C/C++基础知识——字符串(二)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: C/C++基础知识——字符串

C/C++基础知识——字符串(一)https://developer.aliyun.com/article/1437434


8.忽略大小写比较字符串大小

知识点:strcmp(a.c_str(),b.c_str())字符串比较函数

一般我们用 strcmp 可比较两个字符串的大小,比较方法为对两个字符串从前往后逐个字符相比较(按 ASCII 码值大小比较),直到出现不同的字符或遇到 \0 为止。

如果全部字符都相同,则认为相同;如果出现不相同的字符,则以第一个不相同的字符的比较结果为准。

但在有些时候,我们比较字符串的大小时,希望忽略字母的大小,例如 Hellohello 在忽略字母大小写时是相等的。

请写一个程序,实现对两个字符串进行忽略字母大小写的大小比较。

输入格式

输入为两行,每行一个字符串,共两个字符串。注意字符串中可能包含空格。

数据保证每个字符串的长度都不超过 8080。

输出格式

如果第一个字符串比第二个字符串小,输出一个字符 <

如果第一个字符串比第二个字符串大,输出一个字符 >

如果两个字符串相等,输出一个字符 =

输入样例:

Hello
hello

输出样例:

=
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str1,str2;
    getline(cin,str1);
    getline(cin,str2);
    
  for(int i = 0;i < str1.size();i++)
        if(str1[i] <= 'Z' && str1[i] >= 'A')
            str1[i] += 32;
            
    for(int i = 0;i < str2.size();i++)
        if(str2[i] <= 'Z' && str2[i] >= 'A')
            str2[i] += 32;
            
    int x = strcmp(str1.c_str(),str2.c_str());
    
    if(x == 0) cout << "=" << endl;
    else if(x > 0) cout << ">" << endl;
    else cout << "<" <<endl;
    
    return 0;
}

知识点:fgets(a,100,stdin);无法去除‘\n’

#include<iostream>
#include<cstring>
#include<cstdio>
 
using namespace std;
 
int main()
{
    string a,b;
    fgets(a,100,stdin);
    fgets(b,100,stdin);
    //需要手动去除'\n'
    if(a[strlen(a)-1]=='\n')a[strlen(a)-1]=0;
    if(b[strlen(b)-1]=='\n')b[strlen(b)-1]=0;
    for(int i=0;a[i];i++)
    {
        if(a[i]>='A'&&a[i]<='Z')
        {
            a[i]+=32;
        }
    }
    for(int i=0;b[i];i++)
    {
        if(b[i]>='A'&&b[i]<='Z')
        {
            b[i]+=32;
        }
    }
    int t=strcmp(a,b);
    if(t==0)puts("=");
    else if(t<0)puts("<");
    else puts(">");
    return 0;
}

9.去掉多余的空格

知识点:string  a,b;    a+=b;字符串可以实现相加减

输入一个字符串,字符串中可能包含多个连续的空格,请将多余的空格去掉,只留下一个空格。

输入格式

共一行,包含一个字符串。

输出格式

输出去掉多余空格后的字符串,占一行。

数据范围

输入字符串的长度不超过 200。

保证输入字符串的开头和结尾没有空格。

输入样例:

Hello      world.This is    c language.

输出样例:

Hello world.This is c language.
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    getline(cin,str);
    for(int i = 0;i <= str.size();i++)
    {
        if(str[i] != ' ')
            cout << str[i];
        else if(str[i-1] != ' ')
            cout << str[i];
    }
    return 0;
}

知识点:cin可以自己去除空格

#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    while(cin >> str)
    {
        cout << str << " ";
    }
    
    return 0;
}

10.信息加密

知识点: s=(s-'A'+1)%26+'A'   位数取余控制循环

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

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

加密的规则如下:

  1. 字符串中的小写字母,aa 加密为 bb,bb 加密为 cc,…,yy 加密为 zz,zz 加密为 aa。
  2. 字符串中的大写字母,AA 加密为 BB,BB 加密为 CC,…,YY 加密为 ZZ,ZZ 加密为 AA。
  3. 字符串中的其他字符,不作处理。

请你输出加密后的字符串。

输入格式

共一行,包含一个字符串。注意字符串中可能包含空格。

输出格式

输出加密后的字符串。

数据范围

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

输入样例:

Hello! How are you!

输出样例:

Ifmmp! Ipx bsf zpv!
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    getline(cin,str);
    for(int i = 0;i < str.size();i++)
    {
        if(str[i] >= 'a' && str[i] <= 'z')
        {
            str[i] = (str[i]-'a'+1) % 26 + 'a';
        }
        else if(str[i] >= 'A' && str[i] <= 'Z')
        {
            str[i] = (str[i]-'A'+1) % 26 + 'A';
        }
        cout << str[i];
    }
    return 0;
}

11.输出字符串

知识点: 字符串中字符ASCII 值相加后转换为字符

给定一个字符串 a,请你按照下面的要求输出字符串 b。

给定字符串 a 的第一个字符的 ASCII 值加第二个字符的 ASCII 值,得到 b 的第一个字符;

给定字符串 a 的第二个字符的 ASCII 值加第三个字符的 ASCII 值,得到 b 的第二个字符;

给定字符串 a 的倒数第二个字符的 ASCII 值加最后一个字符的 ASCII 值,得到 b 的倒数第二个字符;

给定字符串 a 的最后一个字符的 ASCII 值加第一个字符的 ASCII 值,得到 b 的最后一个字符。

输入格式

输入共一行,包含字符串 a。注意字符串中可能包含空格。

数据保证字符串内的字符的 ASCII 值均不超过 6363。

输出格式

输出共一行,包含字符串 b。

数据范围

2≤a的长度≤100

输入样例:

1 2 3

输出样例:

QRRSd
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    getline(cin,str);
    for(int i = 0; i < str.size()-1;i++)
    {
        cout << (char)(str[i] + str[i+1]);
    }
    cout << (char)(str[0] + str[str.size()-1]);
 
    return 0;
}

12.单词替换

知识点:#include中 stringstream ssin(s);的使用    ssin相当于cin 可直接输入字符串,将字符串变为字符流

输入一个字符串,以回车结束(字符串长度不超过 100)。

该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。

现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

输入格式

输入共 3行。

第 1 行是包含多个单词的字符串 s;

第 2 行是待替换的单词 a(长度不超过100);

第 3行是 a 将被替换的单词 b(长度不超过 100)。

输出格式

共一行,输出将 s 中所有单词 a 替换成 b 之后的字符串。

输入样例:

You want someone to help you
You
I

输出样例:

I want someone to help you
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    string x,y;
    
    getline(cin,str);
    cin >> x >> y;
    
    stringstream ssin (str);
    string s;
   
   while(ssin >> s)
   {
        if(s == x)
            cout << y << " ";
        else 
            cout << s << " ";
   }
    
    return 0;
}

13.字符串中最长的连续出现的字符

知识点:/***第一类指针做法***/

求一个字符串中最长的连续出现的字符,输出该字符及其出现次数,字符串中无空白字符(空格、回车和 tab),如果这样的字符不止一个,则输出第一个。

输入格式

第一行输入整数 N,表示测试数据的组数。

每组数据占一行,包含一个不含空白字符的字符串,字符串长度不超过 200。

输出格式

共一行,输出最长的连续出现的字符及其出现次数,中间用空格隔开。

输入样例:

2
aaaaabbbbbcccccccdddddddddd
abcdefghigk

输出样例:

d 10
a 1
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    while(n--)
    {
        string str;
        cin >> str;
        char c;
        int idx = 0;
        for(int i = 0; i < str.size(); i++)
        {
             /***第一类指针做法***/
            int j = i;
            while(j < str.size() && str[i] == str[j]) j++;
            if(j - i > idx)
            {
                idx = j - i;
                c = str[i];
            }
            i = j - 1;
        }
        cout << c << " " << idx << endl;
    }
    return 0;
}


C/C++基础知识——字符串(三)https://developer.aliyun.com/article/1437436

目录
相关文章
|
2月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
78 4
|
30天前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
48 0
|
1月前
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
|
2月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
2月前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
4月前
|
算法 C++
2730. 找到最长的半重复子字符串(c++,滑动窗口)
2730. 找到最长的半重复子字符串(c++,滑动窗口)
|
4月前
|
C++
567. 字符串的排列(c++)滑动窗口
567. 字符串的排列(c++)滑动窗口
|
4月前
|
编译器 C++
【C++】string类的使用④(字符串操作String operations )
这篇博客探讨了C++ STL中`std::string`的几个关键操作,如`c_str()`和`data()`,它们分别返回指向字符串的const char*指针,前者保证以&#39;\0&#39;结尾,后者不保证。`get_allocator()`返回内存分配器,通常不直接使用。`copy()`函数用于将字符串部分复制到字符数组,不添加&#39;\0&#39;。`find()`和`rfind()`用于向前和向后搜索子串或字符。`npos`是string类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。
|
4月前
|
C语言 C++ 开发者
C++基础知识(一:命名空间的各种使用方法)
C++在C的基础上引入了更多的元素,例如类,类的私密性要比C中的结构体更加优秀,引用,重载,命名空间,以及STL库,模板编程和更多的函数,在面向对象的编程上更加高效。C语言的优势则是更加底层,编译速度会更快,在编写内核时大多数都是C语言去写。 在C++中,命名空间(Namespace)是一种组织代码的方式,主要用于解决全局变量、函数或类的命名冲突问题。命名空间提供了一种封装机制,允许开发者将相关的类、函数、变量等放在一个逻辑上封闭的区域中,这样相同的名字在不同的命名空间中可以共存,而不会相互干扰。
|
5月前
|
C++ 容器
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)
C++字符串string容器(构造、赋值、拼接、查找、替换、比较、存取、插入、删除、子串)