删除字符串中的空格

咋一看觉得很简单,其实自己做也花了些时间。同样,仅仅是删除空格并输出的话很简单。而将空格删除再存储字符串就没那么简单了。

首先,贴上删除空格并输出字符串的程序如下,比较简单,不多做介绍。

/**************删除空格并打印***************/
void print_del_spac(char *p1)
{
    while(*p1 != ‘\0‘)
    {
        if(*p1 != ‘ ‘)
            putchar(*p1);
        p1++;
    }
    putchar(‘\n‘);
}

其次,贴上删除空格并存储新的字符串的程序如下:

/***************删除空格并储存**************/void delete_space(char *p)
{
    int i,space_count=0;
    int len = strlen(p);    

    for(i=0; i<len; i++)
    {
        if(*(p+i) == ‘ ‘)        //空格计数
            space_count++;
        if (space_count != 0)    //空格出现后后面的字符如何处置
            *(p+i+1-space_count) = *(p+i+1);    //这个很关键的一个公式,一个字符前面出现了几个空格就要往前移动几个空格,不容易想到啊,我还是很有灵感地
    }
    for(; space_count>0; space_count--)    //字符串的最后几位赋值为空格
        p[len-space_count] = ‘ ‘;
}

最后,分析一下答案给出的解决方案

/*************答案给出的解决方案************/
void delspace(char *p1)
{
    char *p2;
    while (*p1 != ‘\0‘)
    {
        if (*p1 == ‘ ‘)
        {
            p2 = p1;
            while(*p2 != ‘\0‘)  //遇到一个空格,就把后面的字符全往前移动一位,所以要循环“空格个数”次才能完全移位成功
            {
                *p2 = *(p2+1);  //用了另一个指针p2,不打乱p1的挨个按顺序检查
                p2++;
            }
            p1--; //抵消下面的p1++
        }
        p1++;
    }
}

这个方法思路比较清晰,亲测可行,但是字符串很长且空格很多的时候,循环的次数就比较多了。不如我的方法快捷,一次就搞定。但是我的方法在实际调试过程中,自己也容易蒙。调试中也有了一点心得,对于字符串整体要改动的话,最好在监视窗口监视整个字符串(即指向字符串的指针)即可,这样就能看到整体字符串的变化了;否则一个个看字符的变化,自己也记不住,而且容易搞乱搞混。

时间: 2024-12-24 02:45:36

删除字符串中的空格的相关文章

删除字符串中的空格(空字符)

C++中的字符串过滤空格(空字符),可以使用string自带的方法实现. 代码: #include<iostream> #include<string> using namespace std; /********************************************************** * *功能:去除字符串中的空字符 * *strSrc:源字符串 * *反回值:NONE * ***************************************

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

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

删除字符串中多余的空格

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

字符串中的空格

<string>.Trim():删除输入字符串中的空格<string>.TrimStart():把字符串前面的空格去掉<string>.TrimEnd():把字符串后面的空格去掉<string>.PadLeft():在字符串的左边添加空格<string>.PadRight():在字符串的右边添加空格

去除字符串中的空格

用C语言写一个函数,去除字符串中的空格,并返回删除的空格的个数.不允许开辟新的空间,只能申请简单类型的自动变量.时间复杂度要求为O(n). #include <bitset> #include<iostream> int deleteSpace(char * pstr); void main() { char word[]="dhkak df d fd fdjfkda dfd ff f fd da "; deleteSpace(word); std::cout&

算法分析---删除字符串中出现次数最少的字符

编写一个函数,删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串.字符串中其他字符保持原来的顺序. 格式说明: 字符串仅仅包括字母.不可能为空串,不包括空格,单词仅仅由小写英文字母组成.输入的字符串长度不会超过20个char . 算法思路: (1)定义一个长度为26的整型数组 下标从0-25分别表示a-z这26个小写字母,用来保存字符串中各个字符出现的次数 (由于'a'-'a'=0,'z'-'a'=25刚好与数组的下标相应) "abcdddeeffffx

用较小的代价去除字符串中的空格

题目: 用C语言写一个函数,去除字符串中的空格,并返回删除的空格的个数.不允许开辟新的空间,只能申请简单类型的自动变量.时间复杂度要求为O(n). 比如:char str[]="dhkak   df d fd     fdjfkda     dfd   ff f  fd da "; 处理之后: str[]="dhkakdfdfdfdjfkdadfdffffdda"; 返回删除空格的个数为:12算法思想: 先取字符串的长度,然后用前后各一个指针,分别为p,q,使前面一

Java 去除字符串中的空格和其他字符

直接上代码了. <span style="font-size:18px;">import java.util.regex.Matcher; import java.util.regex.Pattern; /** * java 去除字符串中的空格和其他字符 * @author YYBJ * @date 2014-10-19 */ public class CleanString { public static String replaceBlank(String str) {

C++删除字符串中特定的字符

原文:https://snipt.net/aolin/c-6/ //处理string类型的方法del_sp(string &str)待测试 //处理C-Style的方法可用,可以考虑将该方法改写为void del_ch(char *src , char ch),使其更加通用化. #include <iostream> #include <string> using namespace std; void del_sp(char *src); // 删除C风格字符串中的空格