PTA-2023第十三次练习题目题解
PTA-2023第十三次练习题目题解
以下代码已做防抄袭处理,切勿抄袭。
注意:手机端因为屏幕限制,代码会有(不希望的)换行。解决方案:1.建议使用电脑端打开。2.点击代码进入全屏观看。
6-25 实验9_5_反向打印字符串
思路就是每次先找到字符串的最后一位,然后输出这一位,输出之后将这一位改为‘\0’,然后递归。
void reversePrint(char str[])
{
int i = 0;//控制str的位数
while (str[i] != '\0') i++;//如果没有找到字符串的末尾,就i++向后找
if (i == 0) return;//如果字符串为空就结束递归
printf("%c", str[i - 1]);//打印当前位数
str[i - 1] = '\0';//修改为'\0'
return reversePrint(str//递归
}
6-26 实验9_6_单词字符统计
我们定义一个数组,用来储存每个字母出现的次数。并且用下标代表字母的ASCII值,下标对应的数值表示字母出现的次数。
例如:如果有一个'a'字符,他对应的ASCII值是97,那我们就s[97]++;
最后遍历一遍s数组中97-122之间的数值找到最大值和最小值
int s[200];
int getResult(char word[])
{
int i = 0;//指向word数组
while (word[i] != '\0')
{
s[word[i++]]++;//向s数组中储存
}
int max = -1, min = 200;
for (int j = 'a'; j <= 'z'; j++)//寻找最大值,最小值
{
if (s[j] != 0)
{
if (s[j] > max) max = s[j];
if (s[j] < min) min = s[j];
}
}
//判断是否是质数
if (isPrime(max - min)) return max - min;
else return -1;
}
6-27 实验9_7_设计函数int getVowel(char str[],char vowel[])
利用双指针,指针i指向str,指针j指向vowel,如果str[i]满足条件,就将str[i]储存到vowel[j]中,并且j向后移动一位。
最后不要忘记补充'\0'。
int getVowel(char str[], char vowel[])
{
int j = 0;//设定两个指针指向两个数组
for(int i =0;str[i]!='\0';i++)
{
//如果说str[i]满足条件
if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u')
{
//将这一位储存到vowel中,并将j向后平移一位
vowel[j++] = str[i];
}
}
//字符串末尾补充'\0'
vowel[j] = '\0';
//返回位数
return j;
}
6-28 实验10_1_英超一
遍历一遍字符串,然后根据题目所给的条件计算就好。
int getScore(char* s)
{
int score = 0;//储存最终得分
for (int i = 0; s[i] != '\0';i++)//遍历字符串
{
if (s[i] == 'W')//如果赢,加3分
{
score += 3;
}
else if (s[i] == 'D')//平局加1分
{
score += 1;
}
}
return score;//返回分数
}
6-31 实验10_4_设计函数 locatesubstr
如果str1中的某一个字母和str2中的第一个字母相同了,那就判断这个字母之后的那个字符串是否与str2相同。以此类推。只要注意使用指针就好了
bool check(char* str1, char* str2)
{
while (*str2 != '\0')//遍历一遍str2
{
if (*str1 == '\0') return false;//如果长度不相同,就返回false
if (*str2 != *str1) return false;//如果不是子串,也返回false
str2++;
str1++;
}
//如果是子串,返回true
return true;
}
char* locatesubstr(char* str1, char* str2)
{
while(*str1 !='\0')//遍历一遍str1
{
if (*str1 == *str2)//如果str1中的某一个字母和str2中的第一个字母相同
{
if (check(str1,str2))//判断这个位置之后的那个字符串是否与str2相同
{
return str1;//如果相同返回这个位置的指针
}
}
str1++;
}
//如果没有找到,返回NULL
return NULL;
}
6-33 实验10_8_设计函数 void delcharfun(char *str,char ch)
我们定义一个新数组,用来储存删除后的字符串,最后将新字符串储存回原字符串中就好了。
void delcharfun(char* str, char ch)
{
char str2[99999];//储存新字符串
int j = 0;
for (int i = 0; str[i] != '\0'; i++)
{
if (str[i] == ch)//如果是需要删除的字符,就跳过这一个字符
{
continue;
}
else//否则就储存到str2中
{
str2[j++] = str[i];
}
}
//复制回原数组
for (int k = 0; k < j; k++)
{
str[k] = str2[k];
}
//末尾加'\0'
str[j] = '\0';
}