编程题过滤字符串怎么做

时间:2025-01-28 17:29:40 网络游戏

过滤字符串以去除重复字符,可以采用以下方法:

使用数组记录字符出现情况

创建一个固定大小的数组来记录每个字符是否已经出现过。

遍历字符串,对于每个字符,如果它不在数组中记录为出现过,则将其添加到结果字符串中,并在数组中标记为已出现。

```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;

}

```

解释

数组 `ap`:

用于记录每个字符是否已经出现过。数组大小为26,对应26个小写字母。

遍历字符串:

对于每个字符,检查它是否在数组 `ap` 中记录为出现过。

添加字符:

如果字符未出现过,则将其添加到输出字符串 `pOutputStr` 中,并在数组 `ap` 中标记为已出现。

去除换行符:

使用 `fgets` 读取输入字符串时,去除末尾的换行符。

这种方法的时间复杂度为 O(n),空间复杂度为 O(1)(不考虑输出字符串的空间)。