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

简介: C/C++基础知识——字符串

1.字符串长度

知识点:s.size();用法

给定一行长度不超过 100的非空字符串,请你求出它的具体长度。

输入格式

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

输出格式

输出一个整数,表示它的长度。

数据范围

1≤字符串长度≤100

字符串末尾无回车

输入样例:

I love Beijing.

输出样例:

15
#include<bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string c;
    getline(cin,c);
    cout << c.size();
    return 0;
}

2. 字符串中的数字个数

知识点:字符串中字符的遍历:for(auto c:s)

输入一行字符,长度不超过 100,请你统计一下其中的数字字符的个数。

输入格式

输入一行字符。注意其中可能包含空格。

输出格式

输出一个整数,表示字数字字符的个数。

输入样例:

I am 18 years old this year.

输出样例:

2
#include<bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string s;
    int sum = 0;
    getline(cin,s);
    for(auto c:s)
    if(c <= '9'&&c >= '0')sum++;
    cout << sum << endl;
    return 0;
}

给定一个字符串,在字符串的每个字符之间都加一个空格。

输出修改后的新字符串。

输入格式

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

输出格式

输出增加空格后的字符串。

数据范围

1≤字符串长度≤100

输入样例:

test case

输出样例:

t e s t   c a s e
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    getline(cin,str);
    for(auto c:str)
        cout << c << " ";
    cout<<endl;
}

3.循环相克令

循环相克令是一个两人玩的小游戏。

令词为“猎人、狗熊、枪”,两人同时说出令词,同时做出一个动作——猎人的动作是双手叉腰;狗熊的动作是双手搭在胸前;枪的动作是双手举起呈手枪状。

双方以此动作判定输赢,猎人赢枪、枪赢狗熊、狗熊赢猎人,动作相同则视为平局。

现在给定你一系列的动作组合,请你判断游戏结果。

输入格式

第一行包含整数 TT,表示共有 TT 组测试数据。

接下来 TT 行,每行包含两个字符串,表示一局游戏中两人做出的动作,字符串为 Hunter, Bear, Gun 中的一个,这三个单词分别代表猎人,狗熊和枪。

输出格式

如果第一个玩家赢了,则输出 Player1

如果第二个玩家赢了,则输出 Player2

如果平局,则输出 Tie

数据范围

1≤N≤100

输入样例

3
Hunter Gun
Bear Bear
Hunter Bear

输出样例

Player1
Tie
Player2
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int n;
    cin >> n;
    while(n--)
    {
        string str1,str2;
        cin >> str1 >> str2;
        int x,y;
        
        if(str1 == "Hunter") x = 0;
        else if(str1 == "Bear") x = 1;
        else if(str1 == "Gun") x = 2;
        
        if(str2 == "Hunter") y = 0;
        else if(str2 == "Bear") y = 1;
        else if(str2 == "Gun") y = 2;
        
        if(x == y) cout << "Tie" << endl;
        else if(x == (y+1)%3) cout << "Player1" << endl;
        else cout << "Player2" << endl;
    }
    
    return 0;
}

4.替换字符

知识点:getline(cin,s);可以输入包括空格的字符串

给定一个由大小写字母构成的字符串。

把该字符串中特定的字符全部用字符 # 替换。

请你输出替换后的字符串。

输入格式

输入共两行。

第一行包含一个长度不超过 3030 的字符串。

第二行包含一个字符,表示要替换掉的特定字符。

输出格式

输出共一行,为替换后的字符串。

输入样例:

hello
l

输出样例:

he##o
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    char x;
    cin >> str >> x;
    for(auto c:str)
        if(c == x)
            cout << '#';
        else 
            cout << c;
    return 0;
}

5. 字符串插入

知识点:str.insert(idx+1,substr);字符串的插入

有两个不包含空白字符的字符串 strstr 和 substrsubstr,strstr 的字符个数不超过 10,substrsubstr 的字符个数为 3。(字符个数不包括字符串结尾处的 \0。)

将 substrsubstr 插入到 strstr 中 ASCII 码最大的那个字符后面,若有多个最大则只考虑第一个。

输入格式

输入包括若干行,每一行为一组测试数据,格式为

str substr

输出格式

对于每一组测试数据,输出插入之后的字符串。

输入样例:

abcab eee
12343 555

输出样例:

abceeeab
12345553
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str,substr;
    while(cin >> str >> substr)
    {
        int idx = 0;
        for(int i = 0; i < str.size(); i++)
        {
            if(str[i] > str[idx])
            {
                idx = i;
            }
        }
        str.insert(idx+1,substr);
        cout << str<< endl;
    }
    return 0;
}

6.只出现一次的字符

给你一个只包含小写字母的字符串。

请你判断是否存在只在字符串中出现过一次的字符。

如果存在,则输出满足条件的字符中位置最靠前的那个。

如果没有,输出 no

输入格式

共一行,包含一个由小写字母构成的字符串。

数据保证字符串的长度不超过 100000。

输出格式

输出满足条件的第一个字符。

如果没有,则输出 no

输入样例:

abceabcd

输出样例:

e
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    string str;
    cin >> str;
    int a[100000];
    int idx = 0;
    for(auto c:str)
    {
        a[c]++;
    }    
    for(auto c:str)
    {
        if(a[c] == 1)
        {
            idx = 1;
            cout << c << endl;
            return 0;
        }
    }
    if(idx == 0)
        cout << "no" << endl;
        
    return 0;
}

7.字符串匹配

知识点:for(int i=0;i

给定两个长度相同的字符串 a 和字符串 b。

如果在某个位置 i上,满足字符串 a上的字符 a[i] 和字符串 b上的字符 b[i]相同,那么这个位置上的字符就是匹配的。

如果两个字符串的匹配位置的数量与字符串总长度的比值大于或等于 k,则称两个字符串是匹配的。

现在请你判断给定的两个字符串是否匹配。

输入格式

第一行包含一个浮点数 k,第二行包含字符串 a,第三行包含字符串 b。

输入的字符串中不包含空格。

输出格式

如果两个字符串匹配,则输出 yes

否则,输出 no

数据范围

0≤k≤10,

字符串的长度不超过 100。

输入样例:

0.4
abcde
xbacd

输出样例:

no
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    double k,x;
    cin >> k;
    string a,b;
    cin >> a >> b;
    double sum = 0;
    
    for(int i = 0;i < a.size();i++)
        if(a[i] == b[i])
            sum++;
    
    if(sum/a.size() >= k)
        cout << "yes" << endl;
    else 
        cout << "no" << endl;
    return 0;
}


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

目录
相关文章
|
7天前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
39 16
|
5月前
|
搜索推荐 编译器 C语言
【C++核心】特殊的元素集合-数组与字符串详解
这篇文章详细讲解了C++中数组和字符串的基本概念、操作和应用,包括一维数组、二维数组的定义和使用,以及C风格字符串和C++字符串类的对比。
116 4
|
4月前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
146 0
|
4月前
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
|
5月前
|
C++
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
HTML+JavaScript构建一个将C/C++定义的ANSI字符串转换为MASM32定义的DWUniCode字符串的工具
|
5月前
|
存储 C++
C++(五)String 字符串类
本文档详细介绍了C++中的`string`类,包括定义、初始化、字符串比较及数值与字符串之间的转换方法。`string`类简化了字符串处理,提供了丰富的功能如字符串查找、比较、拼接和替换等。文档通过示例代码展示了如何使用这些功能,并介绍了如何将数值转换为字符串以及反之亦然的方法。此外,还展示了如何使用`string`数组存储和遍历多个字符串。
|
7月前
|
算法 C++
2730. 找到最长的半重复子字符串(c++,滑动窗口)
2730. 找到最长的半重复子字符串(c++,滑动窗口)
|
7月前
|
C++
567. 字符串的排列(c++)滑动窗口
567. 字符串的排列(c++)滑动窗口
|
7月前
|
编译器 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类中的一个常量,表示找不到匹配项时的返回值。博客通过实例展示了这些函数的用法。
|
7月前
|
C语言 C++ 开发者
C++基础知识(一:命名空间的各种使用方法)
C++在C的基础上引入了更多的元素,例如类,类的私密性要比C中的结构体更加优秀,引用,重载,命名空间,以及STL库,模板编程和更多的函数,在面向对象的编程上更加高效。C语言的优势则是更加底层,编译速度会更快,在编写内核时大多数都是C语言去写。 在C++中,命名空间(Namespace)是一种组织代码的方式,主要用于解决全局变量、函数或类的命名冲突问题。命名空间提供了一种封装机制,允许开发者将相关的类、函数、变量等放在一个逻辑上封闭的区域中,这样相同的名字在不同的命名空间中可以共存,而不会相互干扰。
142 0