c语言做出字符串反转和去重操作
时间: 2024-09-30 17:07:19 浏览: 28
在C语言中,字符串反转和去重的操作可以分别用不同的方法来完成。
**字符串反转**:
可以采用双指针法,一个指针从头开始,另一个指针从尾开始,逐个交换字符直到相遇。以下是代码示例:
```c
#include <stdio.h>
#include <string.h>
void reverseString(char *str) {
if (str == NULL || strlen(str) <= 1) return;
char *start = str;
char *end = str + strlen(str) - 1;
while (start < end) {
char temp = *start;
*start++ = *end;
*end-- = temp;
}
}
int main() {
char str[] = "hello world!";
reverseString(str);
printf("Reversed String: %s\n", str); // 输出 "!dlrow olleh"
return 0;
}
```
**字符串去重**:
上面提到的`removeDuplicates`方法同样适用于字符串去重,但如果需要原地修改(不分配额外空间),则需要使用哈希表(如`std::unordered_set`)或排序+扫描的方式,但这会涉及到额外的时间复杂度。这里给出一个哈希表的例子:
```c++
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isDuplicate(char ch, char set[]) {
for (size_t i = 0; set[i] != '\0'; ++i) {
if (set[i] == ch) {
return true;
}
}
return false;
}
void removeDuplicates(char *str) {
size_t n = strlen(str);
bool set[256] = {false}; // 假设ASCII字符范围
for (size_t i = 0; i < n; ++i) {
if (!isDuplicate(str[i], set)) {
set[str[i]] = true;
str[i] = '\0'; // 只保留第一个出现的字符,后续替换为'\0'
} else {
str[i] = '\0'; // 删除重复字符
}
}
}
int main() {
char str[] = "helloo";
removeDuplicates(str);
printf("No Duplicates: %s\n", str); // 输出 "helo"
return 0;
}
```
阅读全文