字符串逆转-压缩连续空格

一、算法描述

给定一个字符串,对于字符串包括多个连续空格的情况,压缩并只保留一个空格,同时以空格隔离的子串逆转。

二、算法思路

其本质是字符串逆转的变体,即在字符串逆转的基础上,还要压缩多余空格,这种情况相比单纯的字符串逆转多了一步判断连续空格的条件

如下代码中,包括单纯的字符串逆转函数,实现比较简单,主要是注意下标的位置

三、算法代码

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
//字符串逆转
void ReverseWord(char *s,int left,int right)
{
    while(left<right)
    {
        char ch=s[left];
        s[left++]=s[right];
        s[right--]=ch;

    }

}
//句子中每个字符串逆转
void ReverseSentence(char *str)
{
    int i=0,j=0;

    while(str[j]!=‘\0‘)
    {
        if(str[j]==‘ ‘)
        {
            ReverseWord(str,i,j-1);
            j++;
            i=j;
        }
        else
            j++;
    }
    ReverseWord(str,i,j-1);
}

//句子中每个字符串逆转并压缩多余空格,字符串间只保留一个空格
void Remove_Space_and_Reverse(char *str,char *tstr)
{
    int i=0,j=0,k=0;

    while(str[j]!=‘\0‘)
    {
        if(str[j]==‘ ‘)
        {
            tstr[k]=‘ ‘;
            ReverseWord(tstr,i,k-1);

            while(str[j]==‘ ‘)
                j++;
            k++;
            i=k;

        }
        else{
            tstr[k++]=str[j++];
        }
    }
    //逆转最后一个字符串
    ReverseWord(tstr,i,k-1);
}

int main()
{
    char s[256]="abcef     hijklm             nop";
    char *tstr=new char[256];
    memset(tstr,0,sizeof(char)*256);
    Remove_Space_and_Reverse(s,tstr);
    cout<<tstr<<endl;
    return 0;
}
时间: 2024-12-13 17:41:31

字符串逆转-压缩连续空格的相关文章

程序设计-----字符串中删除连续空格,只保留一个空格 数中删除连续相同的数,只保留一个数

一.问题描述 输入一个字符串,注意是可以带空格的,我们所要做的是如果字符之间有很多个连续的空格,我们只需要保留一个空格,并输出显示. 有一个类似的问题,是将一个数中连续相同的数删除掉,只保留其中一个数,如3456667,转化为34567.这个问题与字符串的问题大体上是一致的, 只是字符串限定了只有连续的空格需要处理,连续的其他字符是可以接受的,如abbbc是满足条件的,而a    bbb     ccc则要转换为a bbb ccc. 二.问题分析 在书写程序的过程中,首先的思路是以空间换取时间,

字符串压缩-连续字符压缩并输出次数

一.算法描述     给定一个字符串,压缩其连续出现的字符,并输出连续出现的次数,输出顺序与原字符出现的顺序一致,如果只出现一次则不输出次数, 例如: 输入:CCCCDDE, 输出:4C2DE 二.算法思路     通过分析可得出,此算法的关键是统计连续出现字符的次数,并输出,这需要借助于一个临时的字符串来输出结果 三.算法代码 #include <iostream> #include <cstring> #include <cstdio> #include <c

c# 字符串中多个连续空格转为一个空格

#region 字符串中多个连续空格转为一个空格 /// <summary> /// 字符串中多个连续空格转为一个空格 /// </summary> /// <param name="str">待处理的字符串</param> /// <returns>合并空格后的字符串</returns> public static string MergeSpace(string str) { if (str != string

php 将字符串中的连续多个空格转换为一个空格

转载自:http://www.phpernote.com/php-function/633.html /** * 多个连续空格只保留一个 * * @param string $string 待转换的字符串 * @return string $string 转换后的字符串 */ function merge_spaces($string){ return preg_replace("/\s(?=\s)/","\\1",$string); }

C#:将字符串中连续空格转换为一个空格

使用正则表达式来进行转换,代码如下: 注:Trim()方法是去掉字符串首尾的空格:经过正则转换之后,就可以直接用Split进行分割成数组 "\":是转义  ,   "\s":代表空格   ,  "+":表示多个 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 string str = " a b c d e f "; 6 string res = new

PHP删除字符串中的空格和换行符 将字符串中的连续多个空格转换为一个空格

//删除空格和回车 function trimall($str){ $qian=array(" "," ","\t","\n","\r"); return str_replace($qian, '', $str); } //多个连续空格只保留一个 function merge_spaces($string){ return preg_replace("/\s(?=\s)/","

关于Java实现去除连续空格的延伸

第一篇随笔,技术含量比较低,当做笔记给自己记录一下现阶段的一次学习.(*^__^*) …… Java中去除连续空格的代码很简单: public static String formatString(String sourceString) { return sourceString.replaceAll(" +", " "); } 比如输入字符串"a  b   c    d",则经过调用函数处理可以输出"abcd".repla

实现一个函数,把字符串中的每个空格替换成”%20”

1 #include<stdio.h> 2 #include<stdlib.h> 3 4 void replaceBlank(char *str); 5 6 int main() 7 { 8 char str[32]; 9 gets_s(str,32); 10 replaceBlank(str); 11 puts(str); 12 system("pause"); 13 return 0; 14 } 15 16 void replaceBlank(char *s

删除字符串中多余的空格

作者 : 卿笃军 今天遇到的一道笔试题,后来百度 了一下,原来是一道新浪的面试题. 题目大意是这样:给你一个任意字符串,要求你删除字符串中多余的空格. 示例:('_'表示空格) 1)"12__abc_98_"     ==> "12_abc_98" 2)"______65_21__54__3_89___"  ==>  "65_21_54_3_89" 思路:设2个下标i,pos一个用于遍历字符串(i),另外一个用于指