过滤字符串以去除重复字符,可以采用以下方法:
使用数组记录字符出现情况
创建一个固定大小的数组来记录每个字符是否已经出现过。
遍历字符串,对于每个字符,如果它不在数组中记录为出现过,则将其添加到结果字符串中,并在数组中标记为已出现。
```c
include include include void stringFilter(const char *pInputStr, char *pOutputStr) { int i, j, k; int len = strlen(pInputStr); bool ap = {false}; // 用于记录字符是否出现过 for (i = 0; i < len; i++) { char ch = pInputStr[i]; if (!ap[ch - 'a']) { // 如果字符未出现过 pOutputStr[i] = ch; ap[ch - 'a'] = true; } } pOutputStr[len] = '\0'; // 确保输出字符串以空字符结尾 } int main() { char inputStr; char outputStr; while (1) { printf("请输入一串小写字母: "); fgets(inputStr, sizeof(inputStr), stdin); inputStr[strcspn(inputStr, "\n")] = 0; // 去除换行符 stringFilter(inputStr, outputStr); printf("过滤后的字符串: %s\n", outputStr); } return 0; } ``` 解释 用于记录每个字符是否已经出现过。数组大小为26,对应26个小写字母。 对于每个字符,检查它是否在数组 `ap` 中记录为出现过。 如果字符未出现过,则将其添加到输出字符串 `pOutputStr` 中,并在数组 `ap` 中标记为已出现。 使用 `fgets` 读取输入字符串时,去除末尾的换行符。 这种方法的时间复杂度为 O(n),空间复杂度为 O(1)(不考虑输出字符串的空间)。数组 `ap`:
遍历字符串:
添加字符:
去除换行符: