题目2:输入以下字符串Ah!ccsulh!jccsuL 2Jccsu??,内有数字和非数字字符,编写程序将其中连续的字符串ccsu依次存放在一个数组a中。列如:第一个ccsu放在数组a1,第二个存放在数组a2,第三个ccsu放在数组a3。请用C语言完成
时间: 2024-12-20 22:30:05 浏览: 9
题目要求使用C语言编写程序,从给定的字符串"Ah!ccsulh!jccsuL 2Jccsu??"中提取连续的子串"ccsu"并存储在一个数组中。这里我们可以创建一个动态数组,并遍历字符串查找匹配的子串。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LENGTH 100
// 函数用于检查子串是否为 "ccsu"
int is_ccsu(char str[]) {
if (strlen(str) != 4 || strcmp(str, "ccsu") != 0)
return 0;
else
return 1;
}
// 动态分配内存并将连续的 "ccsu" 子串添加到数组中
void find_and_store_ccsu(char *input, char **array, int *count) {
char current = ' ', prev = ' ';
int index = 0;
for (char *p = input; *p != '\0'; ++p) {
if (*p == 'c') { // 如果遇到 'c'
if (prev != 'c')
*array = (char *)realloc(*array, (index + 1) * sizeof(char *));
(*array)[index++] = p; // 更新指针和当前数组元素
} else if (*p == 's' && prev == 'c') { // 如果遇到 's' 并且前一个是 'c'
(*array)[index - 1] = realloc(*array[index - 1], (index + 1) * sizeof(char));
(*array)[index++] = p;
} else if (*p == 'u' && prev == 's' && current == 'c') { // 如果遇到 'u',并且前两个是 's' 和 'c'
(*array)[index - 1] = realloc(*array[index - 1], (index + 1) * sizeof(char));
(*array)[index++] = p;
current = 'u';
} else {
current = prev = ' '; // 如果不是 "ccsu" 结构,清空状态
}
}
*count = index; // 设置实际找到的 "ccsu" 数量
}
int main() {
char input[] = "Ah!ccsulh!jccsuL 2Jccsu??";
char *array[MAX_LENGTH];
int count = 0;
array[count] = (char *)malloc(sizeof(char)); // 初始化动态数组
array[0][0] = '\0';
find_and_store_ccsu(input, array, &count);
printf("Found %d occurrences of 'ccsu':\n", count);
for (int i = 0; i < count; i++) {
printf("Array element %d: %s\n", i + 1, array[i]);
}
// 释放不再需要的内存
for (int i = 0; i < count; i++) {
free(array[i]);
}
free(array);
return 0;
}
```
阅读全文