2025-03-09 学习记录--C/C++-PTA 练习11-4 字符定位(最后一次找到的字符)
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、题目描述 ⭐️
裁判测试程序样例:
#include <stdio.h>
char *match(char *s, char ch);
int main(void )
{
char ch, str[80], *p = NULL;
scanf("%s", str);
getchar(); /* 跳过输入字符串和输入字符之间的分隔符 */
ch = getchar(); /* 输入一个字符 */
p = match(str, ch); /* 调用函数match() */
if( p != NULL ){ /* 找到字符ch */
printf("%s\n", p);
}else{
printf("Not Found.\n");
}
return 0;
}
/* 请在这里填写答案 */
输入样例1
program
r
输出样例1
ram
输入样例2
program
x
输出样例2
Not Found.
二、代码(C语言)⭐️
#include <string.h>
// 函数功能:在字符串 s 中从后往前查找字符 ch,如果找到,则从该字符开始截取到字符串末尾,并返回截取后的字符串;如果未找到,返回 NULL。
char *match(char *s, char ch) {
int len = strlen(s); // 计算字符串 s 的长度
int start = 0; // 初始化起始位置为 0
int cutLen = 0; // 初始化截取长度为 0
// 从字符串末尾开始向前遍历
for (int i = len - 1; i >= 0; i--) {
// 如果当前字符等于目标字符 ch
if (s[i] == ch) {
start = i; // 记录目标字符的位置
cutLen = len - i; // 计算从目标字符到字符串末尾的长度
// printf("%d %d %d %d\n", len, i, start, cutLen); // 调试信息,打印相关变量值
// 将目标字符及其后面的部分复制到字符串 s 的开头
strncpy(s, s + i, cutLen);
s[cutLen] = '\0'; // 在复制后的字符串末尾添加 null 终止符
return s; // 返回截取后的字符串
}
}
// 如果未找到目标字符 ch,返回 NULL
return NULL;
}
三、知识点 ⭐️
C
语言 截取字符串的三种方法,请查看我的另一篇文章。