Leetcode151反转字符串中的单词C语言
时间: 2025-04-30 12:15:12 浏览: 33
### C语言实现LeetCode 151题(反转字符串中的单词)
对于给定的任务,在C语言中解决该问题的一种方法是通过手动处理字符串并利用辅助函数来完成特定操作。下面展示了一种可能的解决方案,其中包含了如何定义必要的功能以及它们是如何协同工作的解释。
#### 完整代码示例
```c
#include <stdio.h>
#include <string.h>
void trim(char *str) {
char *end;
while (isspace((unsigned char)*str)) str++;
end = str + strlen(str) - 1;
while(end > str && isspace((unsigned char)*end)) end--;
*(end+1) = '\0';
}
void reverseString(char* start, char* end){
while(start<end){
char temp=*start;
*start++=*end;
*end--=temp;
}
}
char* reverseWords(char* s) {
int length=strlen(s);
if(length==0)return "";
// Trim leading and trailing spaces
trim(s);
char *result=(char*)malloc(strlen(s)+2); // Extra space for potential extra space at the end and null terminator
result[0]='\0';
char word[50]; // Assuming no single word will exceed this limit
int index=0;
for(int i=0;i<=length;i++){
if(i==length || s[i]==' '){
if(index>0){
reverseString(word,word+index-1);
strcat(result,word);
if(i!=length)strcat(result," ");
memset(word,'\0',sizeof(word));
index=0;
}
}else{
word[index++]=s[i];
}
}
return result;
}
```
此程序首先移除了输入字符串两端多余的空白字符[^1]。接着遍历整个字符串,每当遇到空格或到达字符串结尾时,就调用`reverseString()`函数翻转当前收集到的一个完整的词,并将其追加到最终的结果串后面。为了防止最后多出不必要的空格,在每次添加新词之前会检查当前位置是否为原字符串的实际末端位置[^2]。
注意这里假设单个词语长度不会超过预设的最大值(这里是49),如果存在更长的情况,则需要调整数组大小或者采用动态分配的方式存储临时变量`word`。
阅读全文
相关推荐









