新手入门日记——在acwing快乐字符篇

文章目录


前言

俺就是个小白,俺最近在acwing用C语言写字符串的题,写的多了纪念一下。(前面代码发的时候排版没了,但我懒得重新排版了)


一、替换字符

链接:769. 替换字符 - AcWing题库

题解:

​
int main()
{
char a[31];
int i=0;
gets(a);
char b;
scanf(“%c”,&b);
while(a[i]>0)
{
if(a[i]==b)
a[i]=’#’;
i++;
}
puts(a);
return 0;
}

​


二、字符串加空格

链接:765. 字符串加空格 - AcWing题库

题解:

int main()
{
char a[101];
int i=0;
gets(a);
while(a[i]>0)
{
printf(“%c “,a[i]);
i++;
}
return 0;
}

注意
不能使用scanf(“%s”,&a)进行输入,因为其读到空格会停止。
而gets()函数则是读取到空字符或者换行符停止


三、循环相克令

链接:763. 循环相克令 - AcWing题库

题解:

int main()
{
int n;
char a[15],b[15];
scanf(“%d”,&n);
for(int i=0;i<n;i++)
{
scanf(“%s %s”,&a,&b);
if(strcmp(a,b)==0)printf(“Tie”);
if(strcmp(a,”Hunter”)==0&&strcmp(“Bear”,b)==0)printf(“Player2”);
if(strcmp(a,”Hunter”)==0&&strcmp(“Gun”,b)==0)printf(“Player1”);
if(strcmp(a,”Bear”)==0&&strcmp(“Hunter”,b)==0)printf(“Player1”);
if(strcmp(a,”Bear”)==0&&strcmp(“Gun”,b)==0)printf(“Player2”);
if(strcmp(a,”Gun”)==0&&strcmp(“Hunter”,b)==0)printf(“Player2”);
if(strcmp(a,”Gun”)==0&&strcmp(“Bear”,b)==0)printf(“Player1”);
printf(“\n”);
}
return 0;
}

注意:
strcmp(str1,str2)函数返回值如下:
如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。
如果返回值等于 0,则表示 str1 等于 str2。
返回依据两者每个字符ASCII码判断大小,遇到不同或者空字符停止
这个函数只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
比较示例如下
1.”A”<”B”
2.”A”<”AB”
3.”Apple”<”Banana”
4.”A”<”a”
5.”compare”<”computer”


四、字符串插入

链接:773. 字符串插入 - AcWing题库

题解:

int main()
{
char str[11],substr[4];
while(~scanf(“%s %s”,&str,&substr))
{
int i=0,t=0;
while(str[i]>0)
{
if(str[i]>str[t])
t=i;
i;
}
for(int j=0;j<=t;j)
printf(“%c”,str[j]);
i=0;
while(substr[i]>0)
{
printf(“%c”,substr[i]);
i;
}
//puts(substr)不能用 ,因为会多输出一个回车
t;
while(str[t]>0)
{
printf(“%c”,str[t]);
t++;
}
printf(“\n”);
}
return 0;
}

注意
while(~scanf(“%d %d”,&a,&b))是C语言的连续输入
作用相同的还有while(scanf(“%d %d”, &a, &b)!=EOF)
用哪个看个人习惯

五、只出现一次的字符

链接:772. 只出现一次的字符 - AcWing题库

题解:

int main()
{
char a[100001];
int t=0,i=0,y=0;
gets(a);
while(a[t]>0)
{
y=0;
i=0;
while(a[i]>0)
{
if(a[i]==a[t]&&i!=t)
goto mao;
i;
}
printf(“%c”,a[t]);
y=1;
break;
mao:
t;
}
if(y==0)
printf(“no”);
return 0;
}

另外
还有两种思路(其他题解里看的)
一种是前后都进行查找,如果同一个字母前后查找位置一样就是只出现一次
另一种是开一个数组给每个字母都整一个位置然后判断

六、字符串中的数字个数

链接:761. 字符串中的数字个数 - AcWing题库

题解:

int main()
{
char a[101];
int n=0,i=0;
gets(a);
while(a[i]>0)
{
if(a[i]>=‘0’&&a[i]<=‘9’)
n+=1;
i++;
}
printf(“%d”,n);
return 0;
}

七、字符串长度

链接:760. 字符串长度 - AcWing题库

题解:

int main()
{
char a[101];
gets(a);
int n=strlen(a);
printf(“%d”,n);
return 0;
}

八、字符串匹配

链接:762. 字符串匹配 - AcWing题库

题解:

int main()
{
    char a[100],b[100];
    int s=0,t=0;
    double q,k;
    scanf("%lf\n",&k);
    gets(a);
    scanf("\n");
    gets(b);
    while(a[s]>0)
    {
        if(a[s]==b[s])
            t++;
        s++;
    }
    q=(t*1.0f)/(s*1.0f);
    if(q<k)
        printf("no");
    else
        printf("yes");
    return 0;
}

注意
scanf("%lf\n",&k);一定要加换行符,不然gets会把换行符读进去(我看了好久才看出来bug,还是写得少)
q=(t*1.0f)/(s*1.0f);防止混合运算出现截断问题

九、忽略大小写比较字符串大小

链接:768. 忽略大小写比较字符串大小 - AcWing题库

题解:
 

int main()
{
    char a[81],b[81];
    gets(a);
    scanf("\n");
    gets(b);
    int i=0;
    while(a[i]>0&&b[i]>0)
    {
        if(a[i]>='A'&&a[i]<='Z')
            a[i]+=32;
        if(b[i]>='A'&&b[i]<='Z')
            b[i]+=32;
            i++;
    }
    int r=strcmp(a,b);
    if(r>0)
        printf(">");
    else if(r<0)
        printf("<");
        else
            printf("=");
    return 0;
}


十、输出字符串

链接:764. 输出字符串 - AcWing题库

题解:

#include<stdio.h>
#include<string.h>
int main()
{
    char a[101]="",b[102]="";
    gets(a);
    int i=0;
    while(a[i]>0)
    {
        if(a[i+1]==0)
            b[i]=a[i]+a[0];
        else b[i]=a[i]+a[i+1];
        i++;
    }
    puts(b);
    return 0;
}

注意
字符数组a[]和b[]一定要赋初值为空字符,否则的话在输出答案后还会输出乱码

十一、信息加密

链接:767. 信息加密 - AcWing题库

题解:

#include<stdio.h>
#include<string.h>
void sec(char a[])
{
    int i=0;
    while(a[i]>0)
    {
        if(a[i]>='a'&&a[i]<'z')
            a[i]+=1;
            else if(a[i]=='z')
                a[i]='a';
        if(a[i]>='A'&&a[i]<'Z')
            a[i]+=1;
            else if(a[i]=='Z')
                a[i]='A';
        i++;
    }
}
int main()
{
    char a[101];
    gets(a);
    sec(a);
    puts(a);
    return 0;
}

十二、去掉多余的空格

链接:766. 去掉多余的空格 - AcWing题库

题解:

int main()
{
    char a[201];
    gets(a);
    int i=0;
    while(a[i]>0)
    {
        if(a[i]!=' ')
        {
            if(a[i+1]==' ')
                printf("%c ",a[i]);
            else printf("%c",a[i]);
        }
        i++;
    }
    return 0;
}

十三、单词替换

链接:770. 单词替换 - AcWing题库

题解:

#include<stdio.h>
#include<string.h>
void replace(char s[],char a[],char b[])
{
    int count=0,done=0,gap=0;
    char temp[105]="";
    for(int i=0;i<strlen(s);i+=gap)
    {
        if(s[i]==a[0])
        {
            if(s[i-1]==' '||i==0)       //题目要求是一个单词,所以要判断空格
            {
                done=0;
                int j=i,k=0;
                while(s[j]!=' '&&s[j]>0)
                {
                    if(s[j]!=a[k])
                    {
                        done=1;
                        gap=k;
                        break;
                    }
                    k++;
                    j++;
                }
                if(done==0&&k==strlen(a))  
                //限制k防止出现某个单词恰好等于用来替换的单词的前面一部分导致错误替换
                {
                    count++;
                    int p=0;
                    for(int t=j;s[t]>0;p++,t++)     //储存后面的句子
                        temp[p]=s[t];
                    for(int t=0;b[t]>0;t++,i++)     //替换单词
                        s[i]=b[t];
                    int t=i;
                    for(int q=0;q<p;q++,t++)        //讲后面的句子拼接上去
                        s[t]=temp[q];
                    s[t]='\0';      //使字符串结束,防止后面有剩余的部分
                }
                else
                {
                    gap=1;
                    continue;
                }
            }else gap=1;
        }else gap=1;
    }
    if(count==0) printf("no");
}
int main()
{
    char s[150]="",a[101]="",b[101]="";
    gets(s);
    gets(a);
    gets(b);
    replace(s,a,b);
    puts(s);
    return 0;
}

吐槽:
我真是服了,C语言连字符串替换函数都没有,怪不得好几个字符的题我一个C语言的题解都没看到,写了我五个小时,主要不知道哪里有bug(悲)
另外申明一下,C语言有复制、比较和拼接函数,我写的时候忘了这回事了,就全用代码写了,其实能稍微简单一点的

十四、字符串中最长的连续出现的字符

链接:771. 字符串中最长的连续出现的字符 - AcWing题库

题解:

#include<stdio.h>
#include<string.h>
void suibian(char a[])
{
    int max=0,t=0;
    char max1;
    for(int i=0;i<strlen(a);i+=t)       //i+=t能减少循环次数,提升速度
    {
        for(int j=i;j<strlen(a);j++)
        {
            if(a[j]!=a[i])      //数有几个字符
            {
                t=j-i;
                break;
            }
            else if(j==strlen(a)-1)     //否则会在如字符串为AAAAA的情况下少使输出少1
            {
                t=j-i+1;
                break;
            }
        }
        if(t>max)       //找出最大
        {
            max1=a[i];
            max=t;
        }
    }
    printf("%c %d\n",max1,max);
}
int main()
{
    int n;
    char a[205]="";
    scanf("%d\n",&n);
    for(int i=0;i<n;i++)
    {
        gets(a);
        suibian(a);
    }
    return 0;
} 

十五、最长单词

链接:774. 最长单词 - AcWing题库

题解:

#include<stdio.h>
#include<string.h>
void zuichang(char a[])
{
    int i=0,max=0;
    char max1[505]="";
    while(i<strlen(a))
    {
        int j=i;
        while(a[j]!=' '&&a[j]!='.')
        {
            j++;
        }
        if(j-i>max)
        {
            max=j-i;
            for(int k=i,p=0;k<j;k++,p++)
            {
                max1[p]=a[k];
            }
        }
        i=j+1;
    }
    puts(max1);
}
int main()
{
    int n;
    char a[505]="";
    scanf("%d\n",&n);
    gets(a);
    zuichang(a);
    return 0;
} 


十六、倒排单词

链接:775. 倒排单词 - AcWing题库

题解:

#include<stdio.h>
#include<string.h>
void daocha()
{
    char a[101];
    while(~scanf(" %s",&a))
    {
        daocha();
        printf("%s ",&a);
    }
}
int main () 
{
    daocha();
    return 0;
}

吐槽:写点简单的,省的被吐槽只会写粗暴的

最后

我的acwing账号是:个人空间 - AcWing

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340