- 实例要求:
- 1、给定任意一个
字符串 s ,反转字符串中 单词 的顺序; - 2、
单词 是由非空格字符组成的字符串; - 3、
s 中使用至少一个空格将字符串中的 单词 分隔开; - 4、返回
单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串; - 5、输入
字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格; - 6、返回的
结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格; - 实例分析:
先将字符串的整体进行翻转,再对局部单个单词的字母进行翻转;- 最后分析
字符串s内部可能出现的三种情形: - 1、存在
前导空格; - 2、存在
尾随空格; - 3、存在
单词间的多个空格; - 按照这三种情形,进行逐一击破;
- 主要使用
while循环,if条件判断、strlen函数; - 特别注意:
strlen函数计算字符串s的长度,直到空结束字符(\0),但不包括空结束字符(\0);- 示例代码:
#include
#include
#include
void swap(char * a, char * b)
{
char temp = *a;
*a = *b;
*b = temp;
}
char* reverseWords(char* s)
{
int i = 0;
int len = 0;
i = strlen(s);
i--;
int j = 0;
while(j < i)
{
swap((s+i),(s+j));
i--;
j++;
}
i = 0;
j = 0;
int k = 0;
while(1)
{
while(s[i] != ' '&& s[i] != '\0')
{
i++;
}
k = i;
i--;
while(j < i)
{
swap((s+i),(s+j));
i--;
j++;
}
if(s[k] == '\0')
{
break;
}
i = k + 1;
j = k + 1;
}
len = strlen(s);
while(len > 0 && s[0] == ' ')
{
for(int i = 0; i < len; i++)
{
s[i] = s[i+1];
}
len--;
}
while(len > 0 && s[len - 1] == ' ')
{
s[len-1] = '\0';
len--;
}
i = 0;
while(i < len)
{
if(s[i] == ' ' && s[i+1] == ' ')
{
for(j = i; j < len; j++)
{
s[j] = s[j+1];
}
i--;
len--;
}
i++;
}
return s;
}
int main(int argc, char const *argv[])
{
char s[128] = " I LOVE CHINA ! ";
printf("strlen(s) = %ld,sizeof(s) = %ld\n",strlen(s),sizeof(s));
printf("s = %s\n",s);
printf("s = %s\n",reverseWords(s));
printf("strlen(s) = %ld,sizeof(s) = %ld\n",strlen(s),sizeof(s));
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
strlen(s) = 27,sizeof(s) = 128
s = I LOVE CHINA !
s = ! CHINA LOVE I
strlen(s) = 14,sizeof(s) = 128