文章目录
一、题目
🎃题目描述
🎃输入输出
🎃样例1
输入
AbCdeFG
3
输出
5
说明:
根据ASCII码值排序,第三个ASCII码值的字母为F
F在字符串中位置索引为5(0为字符串的第一个字母位置索引)
🎃样例2
输入
fAdDAkBbBq
4
输出
6
说明:
根据ASCII码值排序前4个字母为AABB由于B重复则只取B的第一个最小位置索引6,
而不是第二个B的位置索引8
二、思路参考
- 首先,包含了所需的头文件 <stdio.h>, <stdlib.h>, <string.h>
- 定义了一个用于比较的函数 compare,用于按照ASCII码值从小到大排序字符串
- 声明了变量 str 用于存储输入的字符串,以及变量 k 用于存储要查找的第k个最小ASCII码值的字母
- 通过 scanf 函数读取输入的字符串和k的值
- 使用 strlen 函数获取字符串的长度,并将其存储在变量 len 中
- 声明了一个新的字符串 sorted_str,并使用 strcpy 函数将输入字符串 str 复制到 sorted_str 中
- 使用 qsort 函数对 sorted_str 字符串进行排序,以便按照ASCII码值从小到大排序,如果k大于字符串长度,即 k > len,输出字符串的最后一个位置索引(len - 1)
- 否则,找到排序后的第k个字母 kth_smallest,并遍历原始字符串,找到该字母在原字符串中的位置索引 position
- 最后,输出位置索引 position。
三、代码参考
🏆C语言
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compare(const void *a, const void *b) {
return *(const char *)a - *(const char *)b;
}
int main() {
char str[100];
int k;
scanf("%s", str);
scanf("%d", &k);
int len = strlen(str);
char sorted_str[100];
strcpy(sorted_str, str);
qsort(sorted_str, len, sizeof(char), compare);
if (k > len) {
printf("%d\n", len - 1);
} else {
char kth_smallest = sorted_str[k - 1];
int position = -1;
for (int i = 0; i < len; i++) {
if (str[i] == kth_smallest) {
position = i;
break;
}
}
printf("%d\n", position);
}
return 0;
}