删除字符串之间的多余空格,两个字符串之间只能有一个空格,第一个字符串之前不能有空格,最后一个字符串之后不能有空格。时间复杂度为O(n),不得重新定义新的字符数组。c语言
时间: 2024-10-21 15:07:42 浏览: 52
在C语言中,如果你想要删除字符串之间的多余空格,并保持每个字符串间只有一个空格,同时保证首尾无空格,你可以采用双指针法。这种方法不需要重新定义新数组,其基本思路如下:
1. 定义两个指针`strStart`和`strEnd`,分别指向原始字符串的开始和结束。
2. 遍历整个字符串,当遇到非空格字符时,将其复制到结果字符串中,并将`strEnd`向右移动一位。
3. 当遇到空格字符时,检查下一个字符是否为空。如果是,则跳过这个空格;如果不是,则表示字符串间的空格应该保留,所以将当前空格复制到结果字符串,然后继续遍历。
4. 当遍历完成后,如果`strEnd`未到达字符串结尾,说明最后一个字符是多余的空格,需要去掉。
以下是示例代码实现:
```c
#include <stdio.h>
#include <string.h>
void trimSpaces(char* str) {
if (str == NULL || strlen(str) <= 1) return;
char* start = str;
char* end = str + strlen(str) - 1;
// 移除开头的空格
while (start < end && *start == ' ') start++;
// 移除末尾的空格
while (end > start && end[-1] == ' ') end--;
// 如果需要保留中间的空格,只在两个字符串间留一个
if (start < end) end--;
// 将剩余的字符复制回原字符串,覆盖掉多余的空格
memmove(str, start, end - start + 1);
str[end - start + 1] = '\0';
}
int main() {
char test_str[] = " Hello World ";
trimSpaces(test_str);
printf("%s\n", test_str); // 输出: "Hello World"
return 0;
}
```
阅读全文