C++语法基础课习题5——字符串-创新互联

文章目录
  • 例题
    • 1. 760.字符串的长度(fgets函数)重点!
    • 2. 761.字符串中数字的个数
    • 3. 763.循环相克令
    • 4. 765.字符串加空格(getline函数+auto用法)重点!
    • 5. 769.替换字符 重点!
    • 6. 773.字符串的插入(substr函数)重点!
    • 7. 772.只出现一次的字符(难题)
  • 习题
    • 1. 762.字符串匹配
    • 2. 768.忽略大小写比较字符串大小
    • 3. 767.信息加密
    • 4. 766.去除多余的空格
    • 5. 764.输出字符串
    • 6. 770.单词替换

创新互联建站公司2013年成立,先为河北等服务建站,河北等地企业,进行企业商务咨询服务。为河北企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。例题 1. 760.字符串的长度(fgets函数)重点!

Acwing 760.字符串的长度

  • 使用fgets函数
#include#includeusing namespace std;

int main()
{char str[101];
	fgets(str,102,stdin);// stdin是系统定义好的变量,fgets会把回车读进来,就是说不会过滤回车
	
	int len = 0;
	for(int i = 0;str[i] && str[i] != '\n';i++) len++;// str[i]遇到\0就跳出来, str[i]不能等于回车,因为fgets会自动读入回车
	
	cout<< len<< endl;
	return 0;
}
  • 使用getline函数
#include#include#includeusing namespace std;

int main()
{string str;
    getline(cin,str);
    
    cout<< str.size()<< endl;
    return 0;
}
  • 方法3
#include#includeusing namespace std;

int main()
{char c;
    
    int len = 0;
    while(~scanf("%c",&c)) len++;
    
    cout<
2. 761.字符串中数字的个数

Acwing 761.字符串中数字的个数

#include#includeusing namespace std;

int main()
{char str[101];
    fgets(str,102,stdin);
    
    int cnt = 0;
    for(int i = 0;str[i]; i++)
        if(str[i] >= '0' && str[i]<= '9')
            cnt++;
    
    cout<< cnt<< endl;
    return 0;
}
3. 763.循环相克令

Acwing 763.循环相克令
在这里插入图片描述

#include#includeusing namespace std;

int main()
{int n;
    cin >>n;
    
    while(n--)
    {string a,b;
        cin >>a >>b;
        
        int x,y;
        if(a == "Hunter") x = 0;
        else if(a == "Bear") x = 1;
        else x = 2;
        
        if(b == "Hunter") y = 0;
        else if(b == "Bear") y = 1;
        else y = 2;
        
        if(x == y) puts("Tie");
        else if (x == (y + 1) % 3) puts("Player1");% 使用%可以让1赢0,2赢1,0赢2均符合
        else puts("Player2");
    }
    return 0;
}
4. 765.字符串加空格(getline函数+auto用法)重点!

Acwing 765.字符串加空格

#includeusing namespace std;

int main()
{string a;
    getline(cin, a);// getline函数只能用到string类型
    
    string b;
    for(auto c : a) b = b + c + ' ';
    
    b.pop_back();// 把新生成的字符串最后的空格删除
    
    cout<< b<< endl;
    return 0;
}
5. 769.替换字符 重点!

Acwing 769.替换字符

#include#includeusing namespace std;

int main()
{char str[31];
    scanf("%s",str);// 读入到回车或者'\0'就结束了
    
    char c;
    scanf("\n%c", &c);// 读入要替换的字符,读入字符不会自动过滤掉前面的回车\n,会读入回车。需要在前面加\n
    
    for(int i = 0;str[i];i++)
        if(str[i] == c)
          str[i ] = '#';
    
    puts(str);
    return 0;
}
6. 773.字符串的插入(substr函数)重点!

Acwing 773.字符串的插入
在这里插入图片描述

  • substr函数可以查找从i开始,长度为len的字符串
    在这里插入图片描述
#includeusing namespace std;

int main()
{string a, b;
    
    while(cin >>a >>b)
    {int p = 0;
        for(int i = 0;i< a.size();i++)// string字符串本身就是数组
            if(a[i] >a[p])
                p = i;// 得到Ascii值大的字符的下标
    
        //前一个指从坐标0开始,长度为p+1的字符,后面是从坐标p+1开始,到最后的字符
        cout<< a.substr(0, p+1)<< b<< a.substr(p+1)<< endl;
    }
    return 0;
}
7. 772.只出现一次的字符(难题)

Acwing 772.只出现一次的字符

#include#include#include// 字符串的函数
using namespace std;

int cnt[26] = {0};// 存储每个字母出现的次数
char str[100010];// 存储字符串

int main()
{cin >>str;
    
    // str[i]里面都是小写字母,小写字母 - 'a'结果是整数,0-25分别表示a-z,'a'在做运算时都是整数运算
    for(int i = 0;str[i];i ++) cnt[str[i] - 'a'] ++;// cnt[]++表示对当前数组元素进行自增操作,元素值+1
    
    for(int i = 0;str[i];i ++)
        if(cnt[str[i] - 'a'] == 1)// 判断cnt[]中哪一个的元素值为1
        {cout<< str[i]<< endl;
            return 0;
        }
    
    puts("no");
    return 0;
}
习题 1. 762.字符串匹配

Acwing 762.字符串匹配

#includeusing namespace std;

int main()
{double k;
    string a, b;
    cin >>k >>a >>b;
    
    int cnt = 0;
    for(int i = 0;i< a.size();i++)
        if(a[i] == b[i])
            cnt++;
    
    if((double)cnt / a.size() >= k) puts("yes");
    else puts("no");
}
2. 768.忽略大小写比较字符串大小

Acwing 768.忽略大小写比较字符串大小

#include#include// char需要
#include// strcmp需要

using namespace std;

int main()
{char a[100], b[100];
    fgets(a, 100, stdin);
    fgets(b, 100, stdin);
    
    // fgets多了回车符,需要去掉回车符
    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;
}
3. 767.信息加密

Acwing 767.信息加密

#includeusing namespace std;

int main()
{string s;
    getline(cin, s);// 读入有空格的字符串
    
    for(auto &c : s)
    {if(c >= 'a' && c<= 'z') c = 'a' + (c - 'a' + 1) % 26;// 后面表示新的偏移量
        else if(c >= 'A' && c<= 'Z') c = 'A' + (c - 'A' + 1) % 26;
    }
    
    cout<< s<< endl;
    return 0;
}
4. 766.去除多余的空格

Acwing 766.去除多余的空格

  • cin 做法
#includeusing namespace std;

int main()
{string s;
    while(cin >>s) cout<< s<<' ';// cin 遇到空格就停止读入,读入一个字符串,就加一个空格
    
    return 0;
}
  • 方法2:双指针算法

在这里插入图片描述

5. 764.输出字符串

Acwing 764.输出字符串

#includeusing namespace std;

int main()
{string a,b;
    getline(cin, a);
    
    for(int i = 0;i< a.size();i++)
        b += (char)(a[i] + a[(i+1)%a.size()]);// %因为i为最后一个字母时,i+1要变为零
    
    cout<< b<< endl;
    return 0;
}
6. 770.单词替换

Acwing 770.单词替换

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享文章:C++语法基础课习题5——字符串-创新互联
本文路径:http://cdiso.cn/article/cdjphj.html