PTA滤字符、函数CHG、mystrcpy--指针练习
看看题目叭~
目录
一、滤字符
二、请编写函数CHG(char *S)
三、myctrcpy
一、滤字符
以指针的方式,将某个字符串中出现的特定字符删去,然后输出新的字符串。
输入格式
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。 每组测试数据输入一个字符串s和一个非空格字符t。其中s的长度不超过100,且只包含英文字母。
输出格式
对于每组测试,将删掉t后新得到的字串输出。如果串被删空,则输出“NULL”(引号不必输出)。
输入样例
2
eeidliecielpvu i
ecdssnepffnofdoenci e
输出样例
eedlecelpvu
cdssnpffnofdonci
想法一
遇到相同的字符时,每找到一次就串就从当前字符左移一循环,覆盖原值。
如果遍历结束后,串的第一个字符是\0,说明串被删空,则输出“NULL”
#include<stdio.h>
#define N 1000
void dele(char *c,char s);
int main()
{int t,i,j;scanf("%d",&t);//t为测试组数char c[N][N];char s;for(int w=0;w<t;w++)//该循环为t组测试数据{scanf("%s",&c[w]);getchar();scanf("%c",&s);dele(c[w],s);}for(int w=0;w<t;w++){if(c[w][0]=='\0')//被删成了空串printf("NULL");elseprintf("%s",c[w]);if(w!=t-1)printf("\n");//格式要求}
}
void dele(char *c,char s)
{char t;int i=0;while(*c!='\0'){if(*c==s){ i=0;while(*(c+i)!='\0'){*(c+i)=*(c+1+i);i++;} c--;//因为从当前字符开始串左移了一位}c++;}}
关于循环里的c--,有必要说一下,这是我想到的笨办法。因为我们左移了一位,所以左移后c指向的其实是原本的下一位,但是当前循环还没有判断到原本的下一个字符,所以c--;
能能能听懂吧(弱小)
想法二
如果一个字符不同就存一个,并且记录有效字符长度,相同就跳过该步骤。
最后 第 有效长度 字符设为\0,作为结束。
其余和上一个想法相同。
函数替换为:
void dele(char *c,char s)
{char t;int i=0,j=0;while(c[i]!='\0'){if(c[i]!=s){c[j]=c[i];j++;}i++;}c[j]='\0';
}
二、请编写函数CHG(char *S)
请编写函数CHG(char S)实现程序功能: 把S字符串中的所有字符左移一个位置,串中的第一个字符移到最后,之后把已处理的字符串逆转后仍存入原字符数组中
函数接口定义
在这里描述函数接口。
void CHG(char *s);
裁判测试程序样例
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <string.h>void CHG(char *s);int main()
{char s[100], t[100];scanf("%s", s);CHG(s);printf("%s", s);return 0;}/* 请在这里填写答案 */
输入样例
abcde
输出样例
aedcb
想法
记录第一个字符,其余字符依次前移一位,最后把记录的第一个字符放到末尾;
已处理的字符串逆转后仍存入原字符数组中,采取对称的交换,即第一个和最后一个交换,第二个和倒数第二个交换,引用为j++,k--;
void CHG(char *s)
{char c=*s;int l=strlen(s);int i=0,j,k;while(i<l){*(s+i)=*(s+i+1);i++;}*(s+i-1)=c;*(s+i)='\0';//这句也可以没有,因为字符前移的时候,\0没有前移for(j=0,k=l-1;j<l/2;j++,k--){c=*(s+j);*(s+j)=*(s+k);*(s+k)=c;}}
三、myctrcpy
题目要求
写一个函数 mystrcmp实现字符串比较,相等输出 0,不等输出其差值,在主函数输出比较结果。
想法
1.遍历两个字符串的字符,相同则下一位,不同则返回差值。
2.如果一个字符串读完,就返回另一个字符串对应的当前的字符的ASCII码。
3.如果读完两个字符串完全相同,就返回0。
//值得说明的是,因为函数类型定义为int,所以把字符转化成ASCII码这一步可以交给函数的return,或者严谨一点可以(int)强制转换。更严谨就是unsigned int了。
#include<stdio.h>
#define N 20
int mystrcmp(char *s1,char *s2);
int main()
{char str1[N],str2[N];gets(str1);gets(str2);printf("compare result = %d\n",mystrcmp(str1,str2)); return 0;
}int mystrcmp(char *s1,char *s2)
{while(*s1!='\0'&&*s2!='\0') {if (*s1==*s2){s1++;s2++;}else return (*s1-*s2);}while(*s1 != '\0') return *s1;while(*s2 != '\0') return -*s2;return 0;
}
这周的PTA就这么多想记录的题。
分享就结束啦,感谢阅读!!!!阿里嘎多!!!
2021.12.7
SThree楠钰子.
PTA滤字符、函数CHG、mystrcpy--指针练习相关推荐
- C语言 请编写函数CHG(char *S) 把字符数组左移后逆转
6-2 请编写函数CHG(char *S) (10 分) 请编写函数CHG(char S)实现程序功能: 把S字符串中的所有字符左移一个位置,串中的第一个字符移到最后,之后把已处理的字符串逆转后仍存入 ...
- 带参函数_更好的理解Python第五弹函数预处理与指针
编译预处理 预处理概念:在编译之前进行处理 在C语言中,预处理行为宏定义,文件包含,条件编译 指令 用处 # 无 #define 定义一个宏 #undef 取消定义一个已经定义的宏 #include ...
- 字符函数和内存函数模拟实现
字符函数和内存函数模拟实现 字符函数和内存函数模拟实现 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<str ...
- 常见的字符函数与字符串函数介绍(1)
常见的字符函数与字符串函数介绍 前言 C语言中对字符与字符串的处理很是频繁,但是C语言中并没有字符串类型的变量,字符串通常存放在常量字符串或者字符数组中.字符串常量适用于那些对它不做任何修改的字符串函 ...
- 字符函数和字符串函数详解(二)strncpy strncat strncmp strstr strtok(及其模拟实现)
系列文章目录 字符函数和字符串函数详解(一)strlen strcpy strcat strcmp 字符函数和字符串函数详解(二)strncpy strncat strncmp strstr str ...
- 字符函数和字符串函数(上)
字符函数和字符串函数 前言 一. strlen 1. '\0' 2. 返回值 3. strlen的模拟实现 二. strcpy 1. 源字符串必须以'\0'结束 2. 会将源字符中的'\0'拷贝到目标 ...
- java 区分中英文,Java 区分文本中的中英文字符函数
Java 区分文本中的中英文字符函数 复制代码 代码如下: public class EnCnTest { public static void main(String args[]) { byte ...
- [C++/PTA] 2017final友元函数之全班同学的平均绩点
[C++/PTA] 2017final友元函数之全班同学的平均绩点 题目要求 解题思路 代码 总结 题目要求 一个学生类,有三个私有成员:名字name.课程学分指针score.课程成绩指针grade. ...
- c语言中常用的字符函数以及字符串函数
文章目录 前言 一.常用字符串函数 1.strlen() 2.strcpy() 3.strcat() 4.strcmp() 5.strstr() 6.memcpy() 6.memmove() 二.qs ...
最新文章
- SQL Server中CROSS APPLY和OUTER APPLY的应用详解
- python判断哪个数最小_怎么用python比较三个数大小
- 免安装版的mysql步骤_mysql免安装版的安装方法及步骤
- 彩虹系统怎么弄服务器,用云服务器彩虹挂机
- 使用C#调用Java带MIME附件WebService方法的初步设想
- 微型计算机三级项目,微机原理三级项目.doc
- android 原型模式,原型模式-下拉刷新的全局设置
- 基于c语言的成绩管理系统,基于C语言实现学生成绩管理系统.docx
- qtableiwdget优化之再优化(大批量数据加载不卡顿)
- 2019足协超级杯花落苏州 开幕战上演“京沪对决”
- 【Tableau】维度,度量,胶囊,蓝色,绿色
- java实现第四届蓝桥杯猜年龄
- cf一直连接服务器,玩穿越火线显示连接服务器超时怎么回事?原因分析及解决方法...
- 已解决:网易邮箱smtphz.qiye.163.com在阿里云环境发不出邮件的问题
- MarkdownPad2 插入数学公式Mathjax
- Blender2.8入门教程(1): 物体操作、物体编辑、修改器Modifier
- Linux下安装java11(亲测)
- draftsight的热补丁
- 报错Error from chokidar (C:\): Error: EBUSY: resource busy or locked, lstat ‘C:\hiberfil.sys‘
- Linux系统和乌班图Ubuntu是什么关系?