zoukankan      html  css  js  c++  java
  • 反转字符数组中的单词,如“This is a test”,反转后“test a is This”

     

    【问 题】将一个字符数组中的单词顺序反转,要求不借助其它字符数组或者指针链表,保存反转后的字符数组,单词间以空格分隔。

    【思路】先将字符数组全部反转,“This is a test”--> “tset a si sihT”, 再将单词逐个反转,最后得到要求的数组。

    int main(int argc, char* argv[])
    {
       
    char str[]= "  This  is  a  test   ";
       
    char* pstart, *p;
       
    int flag = 1;
       
        printf(
    "before rev: %s\n ", str);
      rev(str, str
    +sizeof(str)-2);        /* 全部反转*/
        printf(
    "frist  rev: %s \n", str);
       
    for(p=pstart=str; ;p++)
       
    {
           
    if ((*p==' ')||(*p==0))        /*调整每个单词*/
           
    {           
               
    if (flag)
               
    {           
                    flag
    = 0;       
                    rev(pstart, p
    -1);
                    printf(
    "rev  word : %s\n
    ", str);
                    pstart
    = p;
                }

               
    if (*p==0)        /* 结尾*/
                   
    break;
            }

           
    else if (flag==0)
           
    {
                pstart
    = p;
                flag
    =1;
            }

        }

        printf(
    "after  rev: %s\n
    ", str);
       
    return 0;
    }


    void  rev(char* pstart, char* pend)  /*反转一个字符串*/
    {
       
    while(pend>pstart)
       
    {
           
    *pend^=*pstart;        /*交换数据内容  */
           
    *pstart^=*pend;
           
    *pend^=*pstart;
           
    ++pstart;
           
    --pend;   
        }

    }


     

  • 相关阅读:
    Go-41-回调
    生产者和消费者模型
    等待和通知
    Java 实现多线程的三种方式
    synchronized(修饰方法和代码块)
    volatile 关键字(修饰变量)
    并发三大特性
    Thread 和 Runnable
    《深入理解 Java 虚拟机》学习 -- Java 内存模型
    《深入理解 Java 虚拟机》学习 -- 类加载机制
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/2588833.html
Copyright © 2011-2022 走看看