xtu oj string
时间: 2025-01-09 12:23:42 浏览: 53
### XTU OJ 平台字符串处理题目解析
#### 字符串完成度检测
对于给定的一组字符串,程序需判断这组字符串是否包含了所有英文字母。通过遍历输入字符串并标记字母表中的对应位置实现这一功能[^2]。
```cpp
#include <iostream>
#include <string>
using namespace std;
bool checkIfPangram(const string& sentence) {
bool alphabet[26] = {false};
int count = 0;
for (char c : sentence){
if (!alphabet[c - 'A']){
alphabet[c - 'A'] = true;
++count;
}
}
return count == 26;
}
int main() {
string input;
while(getline(cin, input)){
cout << (checkIfPangram(input) ? "Yes" : "No") << endl;
}
}
```
#### 字符串哈希计算
针对特定的字符串转换为数值型表示形式,并基于大质数取模得到最终散列值的过程被描述如下[^3]:
- 假设在字符串最前方添加了一个特殊字符'b'作为占位符;
- 将'a-z'映射到范围`0-25`之间;
- 使用指定的大素数(如1e9+7)执行取余操作以防止溢出;
```cpp
#include <iostream>
#include <cstring>
typedef long long ll;
const ll MOD = 1e9 + 7;
ll str_to_hash(const char* s) {
ll hash_val = 2; // 表示前置'b'
for (; *s != '\0'; ++s)
hash_val = ((hash_val * 26LL) % MOD + (*s - 'a')) % MOD;
return hash_val;
}
int main(){
char buffer[100];
while(scanf("%s",buffer)!=EOF){
printf("%lld\n",str_to_hash(buffer));
}
}
```
#### 数码串转十进制并与目标数对比
此问题涉及将不同基数下的数字序列解释为其相应的十进制表达式,并验证其是否等于预定义的目标整数n。考虑到可能存在的多种编码方式(二至十六进制),算法会尝试每种可能性直到找到匹配项或穷尽选项为止[^4]。
```cpp
#include <cstdio>
#include <cstdlib>
#include <cctype>
#define MAX_BASE 16
bool is_valid_digit(char ch,int base){
if(isdigit(ch))return ch-'0'<base;
else return tolower(ch)-'a'+10<base&&tolower(ch)>='a';
}
long long convert_base(const char* numStr,long n,int base){
long long res=0,mul=1;
const char* p=numStr+strlen(numStr);
while(p>numStr){
--p;
if(!is_valid_digit(*p,base))break;
res+=mul*(isdigit(*p)?*p-'0':tolower(*p)-'a'+10);
mul*=base;
}
return res==n?true:false;
}
void solve_problem(const char* digitString,unsigned long targetNum){
for(int i=MAX_BASE;i>=2;--i){
if(convert_base(digitString,targetNum,i)){
puts("YES");
return ;
}
}
puts("NO");
}
int main(){
char buf[32];unsigned long N;
while(~scanf("%s%lu",buf,&N))
solve_problem(buf,N);
}
```
阅读全文
相关推荐


















