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

目录
相关文章
|
2月前
|
存储 算法 编译器
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
【C++ 字符数组的模板特化】面向字符串的C++模板特化:理解与实践
48 1
|
2月前
|
存储 缓存 安全
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
C++数组全解析:从基础知识到高级应用,领略数组的魅力与技巧
54 1
|
2月前
|
存储 C++ 索引
C++ 字符串完全指南:学习基础知识到掌握高级应用技巧
C++的字符串使用`string`类处理,如`string greeting = &quot;Hello&quot;`。字符串连接可通过`+`或`append()`函数实现。访问字符使用索引,如`myString[0]`。`length()`或`size()`可获取长度。`getline()`用于读取整行输入。注意转义字符如`\\&quot;`用于在字符串中嵌入双引号。使用`cin`读取字符串时,空格会终止输入,而`getline()`能读取整行。
25 0
|
2月前
|
编译器 C++
深入理解 C++ 语法:从基础知识到高级应用
了解C++基础语法,包括`#include &lt;iostream&gt;`引入输入输出库,`using namespace std`简化命名。`int main()`是程序入口,`cout &lt;&lt; &quot;Hello World!&quot;`用于输出文本。换行可使用`\n`或`endl`。注释使用`//`进行单行注释,`/* */`进行多行注释。
27 0
|
6天前
|
存储 编译器 C语言
C++字符串大小写之for语句
C++字符串大小写之for语句
12 0
|
8天前
|
C++
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
【代码片段】【C++】获取当前时间戳并生成固定格式字符串
11 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
15天前
|
安全 C++
石头剪子布(字符串解法 C++)
石头剪子布(字符串解法 C++)
17 0
|
23天前
|
C++
C++语言学习数组和字符串应用案例
【4月更文挑战第8天】该文展示了C++中数组和字符串的应用案例。数组示例定义了一个整数数组并访问、修改其元素,计算了元素之和。字符串示例中,定义了一个字符串并遍历、修改字符,进行了字符串拼接、查找子字符串及替换操作。
10 3
|
2月前
|
算法 程序员 编译器
【C++ 基础知识 】C++流操纵符全解析:从基础到高级应用
【C++ 基础知识 】C++流操纵符全解析:从基础到高级应用
80 0