力扣之反转字符串

题目链接
这题还不算难;
思路:从后往前遍历字符串,若不为空,则将字符储存到临时数组stack中,一旦遇到空格,则将临时数组中的元素赋值给最终数组stack1。
细节代码中有解释。

char * reverseWords(char * s){
    int len=strlen(s);
    char *stack=(char *)malloc((len+1)*sizeof(char));
    char *stack1=(char *)malloc((len+1)*sizeof(char));
    int i=0,j=0,flag=0,m=0,n=0,count=0;
    
    if(len==0){//若字符串为"",则返回""
        return"";
    }
    
    while(s[i]==' '){//若字符串全为空格,返回""
        count++;
        i++;
    }
    if(count==len)return "";
    
    for(i=len-1;i>=0;i--){
        if(s[i]!=' '){
            stack[m]=s[i];
            m++;
            flag=1;
        }
        if(s[i]==' '){
            while(m>0 && flag==1){
                m--;//m要先减一,因为在处理一个单词的最后一个字母后,m又加了一。
                stack1[n]=stack[m];
                n++;
            }
            if(flag==1){
                stack1[n]=' ';
                n++;
            }
            flag=0;//清除标记位,当遍历完字母后有多个空格,flag==0,则不会对多余空格处理。
        }
    }
    if(m!=0){//当stack[m]=s[i]到字符串最后时,t=t-1=0-1=-1,无法再进入循环,要单独处理
        while(m>0){
            m--;
            stack1[n]=stack[m];
            n++;
        }
    }
    if(stack1[n-1]==' '){//最后一个单词末尾是有空格的,但题目条件是翻转后最后一个字母不为空格。
        n=n-1;
    }
    stack1[n]='\0';
    return stack1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值