处理一个只含有0-9和a-z的字符串,使得输出字符串满足: 每个子片段中的字符都是严格升序排列的,按照ascii码顺序即可 下一个子片段必须与前一个子片段相同,或者是其子集 如果输入非法,应该输出 <invalid input string> 【输入形式】 一行字符串 【输出形式】 处理后的字符串 【样例输入】 aabbccdd 007799aabbccddeeff113355zz 1234.89898 abcdefabcdefabcdefaaaaaaaaaaaaaabbbbbbbddddddee 【样例输出】 abcdabcd 013579abcdefz013579abcdefz <invalid input string> abcdefabcdefabcdefabdeabdeabdabdabdabdabaaaaaaa设计一个c语言程序
时间: 2024-02-20 17:00:50 浏览: 67
PHP 一个随机字符串生成代码
好的,以下是用C语言实现的处理函数:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* process_string(char* s) {
if (strlen(s) == 0) {
return "<invalid input string>";
}
for (int i = 0; i < strlen(s); i++) {
if (!((s[i] >= '0' && s[i] <= '9') || (s[i] >= 'a' && s[i] <= 'z'))) {
return "<invalid input string>";
}
}
char* res = (char*)malloc(sizeof(char) * (strlen(s) + 1));
memset(res, 0, sizeof(char) * (strlen(s) + 1));
int k = 0;
for (int i = 0; i < strlen(s); i++) {
int j = i + 1;
while (j < strlen(s) && s[j] >= s[j-1]) {
j++;
}
char* sub = (char*)malloc(sizeof(char) * (j - i + 1));
memset(sub, 0, sizeof(char) * (j - i + 1));
strncpy(sub, s + i, j - i);
for (int t = 0; t < strlen(sub); t++) {
for (int p = t + 1; p < strlen(sub); p++) {
if (sub[p] < sub[t]) {
char tmp = sub[t];
sub[t] = sub[p];
sub[p] = tmp;
}
}
}
if (k > 0 && strcmp(sub, res + k - (j - i)) != 0 && strstr(res + k - (j - i), sub) == NULL) {
free(sub);
free(res);
return "<invalid input string>";
}
strcpy(res + k, sub);
k += j - i;
free(sub);
}
return res;
}
int main() {
char s1[] = "aabbccdd";
char s2[] = "007799aabbccddeeff113355zz";
char s3[] = "1234.89898";
char s4[] = "abcdefabcdefabcdefaaaaaaaaaaaaaabbbbbbbddddddee";
printf("%s\n", process_string(s1));
printf("%s\n", process_string(s2));
printf("%s\n", process_string(s3));
printf("%s\n", process_string(s4));
return 0;
}
```
这个函数首先检查输入字符串是否合法,如果不合法则返回 `<invalid input string>`。然后按照题目要求,将字符串分为多个子片段,每个子片段中的字符都是严格升序排列的,并且下一个子片段必须与前一个子片段相同,或者是其子集。最后将所有子片段拼接起来返回即可。注意,在C语言中,字符串必须以 `\0` 结尾,所以在动态分配内存时需要额外分配一个字符用于存放结束符。
阅读全文