| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2643 人关注过本帖
标题:删除字符串中空格问题(第一个字母意外变成空格)
只看楼主 加入收藏
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
结帖率:100%
收藏
 问题点数:0 回复次数:15 
删除字符串中空格问题(第一个字母意外变成空格)
//删除在字符串中所有空格
int main(void)
{
    int i,j;
    char str[16]="a abc  abc  daf";//依次一个空格,2个空格,2个空格
    for(i=0;str[i] != '\0';i++)
    {
        if(str[i]==' ')//找到有空格的位置
        {
        for(j=i+1;str[i] != '\0';j++)
        {
            if(str[j]!=' ')//从有空格的位置往后找到第一个有字母的位置
            {
                str[i]=str[j];//把有字母的值赋到原先空格的位置
                str[j]=' ';//把原先的有数字的位置值赋值为空格
                break;
            }
        }
        }
     printf("%2c,%2d",str[0],i);
    }
    puts(str);
}




为什么在i为16的时候str[0]变成了空格?为什么字符数组会溢出,字符串末尾不是有默认结束符吗?
搜索更多相关主题的帖子: str 位置 字母 空格 字符串 
2020-04-07 08:35
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
收藏
得分:0 
我上传的图片可以看到吗?
结果是:
 a, 0 a, 1 a, 2 a, 3 a, 4 a, 5 a, 6 a, 8 a, 9 a, 10 a, 11 a, 12 a, 13 a, 14 a, 15  ,16 abcabcdaf
2020-04-07 08:40
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10541
专家分:42927
注 册:2014-5-20
收藏
得分:0 
#include <stdio.h>
int main(void)
{
    int i,j=0;
    char str[16]="a abc  abc  daf";//依次一个空格,2个空格,2个空格
    for(i=0;str[i] != '\0';i++)
    {
        if(str[i] != ' ')
            str[j++] = str[i];
    }
    str[j++] = '\0';
    puts(str);
}
2020-04-07 09:17
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用吹水佬在2020-4-7 09:17:09的发言:

#include <stdio.h>
int main(void)
{
    int i,j=0;
    char str[16]="a abc  abc  daf";//依次一个空格,2个空格,2个空格
    for(i=0;str != '\0';i++)
    {
        if(str != ' ')
            str[j++] = str;
    }
    str[j++] = '\0';
    puts(str);
}

看原来的代码 意思大概是 非空格原顺序摆前面 空格摆后面
你的处理空格都被删除了
计算空格个数 最后做一个memset

https://zh.
2020-04-07 10:07
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
收藏
得分:0 
回复 4楼 lin5161678
所以为什么str[0]在i等于16的时候变成空格啊?
2020-04-07 12:08
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
你代码出现的是溢出错误,“for(j=i+1;str[i] != '\0';j++)”循环条件明显问题,应该是“for(j=i+1;str[j] != '\0';j++)”。

能编个毛线衣吗?
2020-04-07 12:42
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
3楼的代码好调皮呀,后置加加就像是一个顽皮的小孩,摸不清看不透

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-04-07 13:46
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10541
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用lin5161678在2020-4-7 10:07:27的发言:


看原来的代码 意思大概是 非空格原顺序摆前面 空格摆后面
你的处理空格都被删除了
计算空格个数 最后做一个memset

不是空格的往前移,没有将空格摆后面。
最好是先去到第一次出现空格的地方再去处理。
2020-04-07 14:36
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用吹水佬在2020-4-7 14:36:19的发言:


不是空格的往前移,没有将空格摆后面。
最好是先去到第一次出现空格的地方再去处理。

看代码注释
str[j] = ' ';
这里把空格摆到后面了

处理之前的字符串和处理之后的字符串
长度是一样的

[此贴子已经被作者于2020-4-7 14:53编辑过]


https://zh.
2020-04-07 14:45
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
收藏
得分:0 
回复 6楼 wmf2014
我想找个磕头的表情没找到
2020-04-07 14:59
快速回复:删除字符串中空格问题(第一个字母意外变成空格)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018500 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved