给定任意字符串,反转字符串中的单词

  • 实例要求:
  • 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);
	    
	    // while(s[i] != '\0')
	    // {
	    //     i++;
	    // }
	    
	    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;
	}



  • 运行结果:
	strlen(s) = 27,sizeof(s) = 128
	s =  I LOVE      CHINA  !      
	s = ! CHINA LOVE I
	strlen(s) = 14,sizeof(s) = 128

你可能感兴趣的:(C语言练习题系列,算法,前端,C语言)