字符串的逆向输出

比如说给定一字符串 " I Love ShanLiJuan " 那么它的逆向输出就是"ShanLiJuan Love I  "  这里空白符作为单词的分割符。

方案一:

 使用标记法,需要一个缓存区。但是比较容易理解, 就是逆向扫描源字符串,把每个单词正向拷贝到缓存区,代码如下:


void ReverseWord(char* p_string)
{
 int word_read_pos = 0;
 int word_end_pos = 0;
 int word_write_pos = 0;
 int word_token_pos = 0;
 char* buffer = NULL;
 word_token_pos = strlen(p_string) - 1;
 buffer = new char[word_token_pos + 2];

 while(word_token_pos >= 0)
 {
  if(p_string[word_token_pos] == ' ')
  {
   buffer[word_write_pos] = p_string[word_token_pos];
   word_token_pos--;
   word_write_pos++;
  }
  else
  {
   word_end_pos = word_token_pos;
   while(word_token_pos >= 0 &&p_string[word_token_pos] != ' ')
    word_token_pos--;
   word_read_pos = word_token_pos + 1;

   while(word_read_pos <= word_end_pos)
    buffer[word_write_pos++] = p_string[word_read_pos++];
  }
 }

 buffer[word_write_pos] = '/0';
 strcpy(p_string,buffer);
 delete buffer;
}

方案二: 不使用缓存区。

步骤:

1 首先对输入的源字符串做交换操作。

2 对由步骤1产生的字符串正向扫描,对每个单词对交换操作。代码如下:


void ReverseWordMethod(char* start,char* end)
{
 while(start < end)
 {
  char tmp = *start;
  *start = *end;
  *end = tmp;
  start++;
  end--;
 }
}

void ReverseString(char* psz)
{
 char* p_end = (char*)(&psz[strlen(psz) - 1]);
 char* p_start = psz;
 int start_pos = 0;
 int end_pos = 0;
 int scan_length = strlen(psz) - 1;
 ReverseWordMethod(p_start,p_end);

 while(start_pos <= scan_length)
 {
  if(psz[start_pos]  != ' ')
  {
   end_pos = start_pos;
   while(end_pos <= scan_length && psz[end_pos] != ' ')
    end_pos++;
   ReverseWordMethod((char*)(&psz[start_pos]),(char*)(&psz[end_pos - 1]));
   start_pos = end_pos;
  }
  else{
   start_pos++;
  }
 }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值