删除公共字符(1228:算法概论02) 题目描述 输入两个字符串,从第一个字符串中删除第二个字符串中的所有字符。 例如输入"They are students."和"aeiou",则删除之后c语言
时间: 2024-09-22 15:03:13 浏览: 28
在C语言中,要删除第一个字符串(`str1`)中的所有第二个字符串(`str2`)中的公共字符,可以采用遍历和动态数组的方式来实现。以下是基本步骤:
1. **创建临时数组**:为了存储处理后的结果,你需要一个新的数组`result`,其长度为`str1`的长度减去`str2`的长度。
2. **初始化指针**:设置两个指针,`i`指向`str1`的开始,`j`指向`str2`的开始。同时,`k`表示`result`数组的当前位置。
3. **遍历检查**:对于每个字符`str1[i]`,检查它是否在`str2[j:]`中出现。可以使用循环和条件判断实现,比如用哈希表(如`bool visited[256];`,假设ASCII字符范围),如果不在就将`str1[i]`添加到`result[k++]`位置,并移动`i`到下一个字符。
4. **复制剩余字符**:当遍历完`str1`后,将剩余的未被删除的字符直接添加到`result`数组的末尾。
5. **转换为字符串并返回**:最后,将`result`转换回字符串并返回。
下面是一个简单的C语言函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
char* remove_chars(char* str1, char* str2) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int k = 0;
bool visited[256];
memset(visited, false, sizeof(visited));
for (int i = 0; i < len1; ++i) {
if (!visited[str1[i]]) {
result[k++] = str1[i];
visited[str1[i]] = true;
}
}
// If there's anything left after removing characters from str1
while (k < len1) {
result[k++] = str1[k - 1];
}
result[len1] = '\0'; // Add null terminator
return result;
}
int main() {
char str1[] = "They are students.";
char str2[] = "aeiou";
char* result = remove_chars(str1, str2);
printf("After removing common chars: %s\n", result); // Example output: "Thy r stdnts."
free(result); // Don't forget to deallocate the memory
return 0;
}
```
阅读全文