给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: “Let’s take LeetCode contest”
输出: “s’teL ekat edoCteeL tsetnoc”
char * fanzhuan(char *s , int n){
char temp;
for(int i = 0 ; i < n/2 ; i++)
{
temp = s[i];
s[i] = s[n - i - 1];
s[n - i - 1] = temp;
}
return s;
}
char * reverseWords(char * s){
int i , j , m , n = 0;
int slen = strlen(s);
char *temp = (char *)calloc(slen+1,sizeof(char));
char *returns = (char *)calloc(slen+1,sizeof(char));
for(i = 0 , j = 0; i <= slen ; i++)
{
if(s[i] != ' ' && i != slen)
{
temp[j] = s[i];
j++;
}
else if(s[i] == ' ')
{
fanzhuan(temp,j);
for(m = 0 ; m < j ; m++)
{
returns[n] = temp[m];
n++;
}
returns[n] = ' ';
n++;
j = 0;
}
else
{
fanzhuan(temp,j);
for(m = 0 ; m < j ; m++)
{
returns[n] = temp[m];
n++;
}
}
}
return returns;
}
思路:首先单独写个反转字符串的函数,为了后面不用每次都初始化数组,我这个函数加了一个参数规定反转的头和尾。
然后扫描字符串,没到空格就复制进辅助数组,然后到了空格就反转辅助数组然后放进去,加个空格,继续扫描。
最后扫描到尾端注意一下最后是没空格的,要特殊拿出来处理。