2025华为OD机试题库(按算法分类):2025华为OD统一考试题库清单(持续收录中)以及考点说明(Python/JS/C/C++)。
专栏导读
本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。
一、题目描述
将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。
数据范围:字符串长度满足1≤n≤100 。
二、输入描述
输入一个字符串。
三、输出描述
字符中所有出现的数字前后加上符号“*”,其他字符保持不变。
四、测试用例
测试用例1
1、输入
abc123def
2、输出
abc123def
3、说明
中间的“123”是连续数字,所以在其前后各添加一个星号。
测试用例2
1、输入
007bond
2、输出
007bond
3、说明
“007”作为一个连续数字,被星号包围,后面的字母保持原样。
五、解题思路
- 读取输入,将字符串存储在变量pInStr中;
- 创建一个StringBuilder对象res用于存储结果;
- 遍历字符串pInStr的每个字符,判断是否为数字;
- 如果当前字符是数字,则在res中添加字符’*';
- 接着,将连续的数字添加到res中,直到遇到非数字字符为止;
- 最后,在res中添加字符’*';
- 如果当前字符不是数字,则直接将其添加到res中;
- 将res转换为字符串并返回作为结果;
六、Python算法源码
# 定义函数 markNum,用于将字符串中所有整数前后加上“*”
def markNum(s):
res = [] # 使用列表存储结果字符,后续再拼接为字符串
i = 0 # 初始化下标 i 为 0
while i < len(s): # 循环遍历整个字符串
# 判断当前字符是否为数字
if '0' <= s[i] <= '9':
res.append('*') # 在数字前添加 *
# 处理连续的数字字符
while i < len(s) and '0' <= s[i] <= '9':
res.append(s[i]) # 添加数字字符到结果列表
i += 1 # 下标后移
res.append('*') # 在数字后添加 *
else:
res.append(s[i]) # 非数字字符直接添加到结果列表
i += 1 # 下标后移
return ''.join(res) # 将列表中的字符拼接成字符串返回
# 以下为测试代码,遍历测试用例并打印结果
if __name__ == "__main__":
test_cases = [
"abc123def", # 测试用例1
"123", # 测试用例2
"a1b2", # 测试用例3
"a", # 测试用例4
"007bond" # 测试用例5
]
# 对每个测试用例调用 markNum 并输出结果
for case in test_cases:
print("输入:", case, "输出:", markNum(case))
七、JavaScript算法源码
// 定义函数 markNum,用于将字符串中所有整数前后加上“*”
function markNum(s) {
let res = ""; // 初始化结果字符串
let i = 0; // 初始化下标 i 为 0
// 遍历整个字符串
while (i < s.length) {
// 判断当前字符是否为数字
if (s[i] >= '0' && s[i] <= '9') {
res += "*"; // 在数字前添加 *
// 处理连续的数字字符
while (i < s.length && s[i] >= '0' && s[i] <= '9') {
res += s[i]; // 将数字字符添加到结果中
i++; // 下标后移
}
res += "*"; // 在数字后添加 *
} else {
res += s[i]; // 非数字字符直接添加到结果字符串
i++; // 下标后移
}
}
return res; // 返回处理后的字符串
}
// 以下为测试代码,使用测试用例验证函数正确性
const testCases = [
"abc123def", // 测试用例1
"123", // 测试用例2
"a1b2", // 测试用例3
"a", // 测试用例4
"007bond" // 测试用例5
];
// 对每个测试用例调用 markNum 并输出结果
testCases.forEach(test => {
console.log("输入:", test, "输出:", markNum(test));
});
八、C算法源码
#include <stdio.h>
#include <ctype.h> // 提供 isdigit 函数
#include <string.h>
int main() {
char input[105]; // 定义输入字符数组,长度稍大于100以保证安全
// 使用 fgets 读取输入,假设输入以换行结束
while (fgets(input, sizeof(input), stdin) != NULL) {
int len = strlen(input);
// 如果最后一个字符是换行符,则将其替换为字符串结束符
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
char output[256]; // 定义输出字符数组,预留足够空间(最坏情况:所有字符均为数字)
int j = 0; // 输出数组下标初始化
for (int i = 0; input[i] != '\0'; ) {
// 判断当前字符是否为数字
if (isdigit(input[i])) {
output[j++] = '*'; // 数字前添加 *
// 处理连续数字
while (input[i] != '\0' && isdigit(input[i])) {
output[j++] = input[i++]; // 将数字字符添加到输出
}
output[j++] = '*'; // 数字后添加 *
} else {
output[j++] = input[i++]; // 非数字字符直接复制到输出
}
}
output[j] = '\0'; // 添加字符串结束符
printf("%s\n", output); // 输出结果字符串
}
return 0;
}
九、C++算法源码
#include <iostream>
#include <string>
using namespace std;
int main() {
string input;
// 使用 getline 读取每一行输入
while (getline(cin, input)) {
string output; // 用于存储输出结果
int i = 0; // 初始化下标 i 为 0
// 遍历输入字符串
while (i < input.size()) {
// 判断当前字符是否为数字
if (input[i] >= '0' && input[i] <= '9') {
output.push_back('*'); // 在数字前添加 *
// 处理连续数字
while (i < input.size() && input[i] >= '0' && input[i] <= '9') {
output.push_back(input[i]); // 将数字字符添加到输出字符串
i++; // 下标后移
}
output.push_back('*'); // 在数字后添加 *
} else {
output.push_back(input[i]); // 非数字字符直接添加到输出
i++; // 下标后移
}
}
// 输出处理后的字符串
cout << output << endl;
}
return 0;
}
🏆下一篇:华为OD机试真题 - 简易内存池(Python/JS/C/C++ 2024 E卷 200分)
🏆本文收录于,华为OD机试真题(Python/JS/C/C++)
刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。