说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

行后去空格 就这么难么

编辑:说三道四文库 发布时间:2017-12-12 04:48
HTML文档下载 WORD文档下载 PDF文档下载
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
FILE * f =  fopen ("one.txt","r");
FILE * s =  fopen ("two.txt","a+");
char sz [10000] = {0};
while(fgets(sz,10000,f))

for(int i = strlen(sz)-1; i>= 0; i--)
{
if(sz[i] != ' ')
{
sz[++i] = '\0';
break;
}
}
fprintf(s,"%s",sz);
memset(sz,0,sizeof(sz));
}
return 0;
}


怎么还是原样输出到文件里面,竟然没作用,求解
for(int i = strlen(sz)-1; i>= 0; i--)
        {
            if(sz[i] != ' ')
            {
                sz[++i] = '\0';

                break;
            }    
        }


找到的是i,替换的是++i,也就是i的下一个
而且'\0'表示的是字符串结尾
引用 1 楼 hua_yang 的回复:
C/C++ code
for(int i = strlen(sz)-1; i>= 0; i--)
        {
            if(sz[i] != ' ')
            {
                sz[++i] = '\0';

                break;
            }    
……
 你看错了 sz[i] != ' '   不是空格的地方怎么可以用0来代替  难道去空格不是以'\0'直接来结束么
 FILE * s =  fopen ("two.txt","w");
没看懂
#include<iostream>
using namespace std;

int main()
{
    FILE * f =  fopen ("text3.txt","r");
    FILE * s =  fopen ("two.txt","a+");
    char sz [10000] = {0};
    int i;
    while(fgets(sz,10000,f))
    { 
        for( i= strlen(sz)-1; i>= 0; i--)
        {
            if(sz[i] != ' '&&sz[i] != '\n')
            {
                break;
            }    
            sz[i] = '\0';
        }
        sz[i+1] = '\n';
        fprintf(s,"%s",sz);
    }
    return 0;
}

不知道这个是不是楼主想要的,楼主看看
补充一下
#include<iostream>
using namespace std;

int main()
{
    FILE * f =  fopen ("text3.txt","r");
    FILE * s =  fopen ("two.txt","a+");
    char sz [10000] = {0};
    int i;
    while(fgets(sz,10000,f))
    { 
        for( i= strlen(sz)-1; i>= 0; i--)
        {
            if(sz[i] != ' '&&sz[i] != '\n')//找到最后一个不是空格的地方
            {
                break;
            }    
            sz[i] = '\0';//把是空格的都改成结束符
        }
        sz[i+1] = '\n';//结尾加个回车
        fprintf(s,"%s",sz);
    }
    return 0;
}
比如sz[]="ABC  \n"
那么sz[]={'A','B','C',' ',' ','\n','\0'}
strlen(sz) = 5
sz[5] = '\n' != ' '
所以你的循环只执行了一次就结束了。
恩,写错了,strlen(sz) = 6,strlen不计算\0。但是因为数组下标是从0开始,所以正好是最后一个字符‘\n’。
strlen(sz) = 6
sz[6 - 1] = '\n' != ' '
引用 6 楼 questionfish 的回复:
补充一下

C/C++ code
#include<iostream>
using namespace std;

int main()
{
    FILE * f =  fopen ("text3.txt","r");
    FILE * s =  fopen ("two.txt","a+");
    char sz [10000] = {0};
    int i;……

不小心把源文件改了。。。楼主注意再改成自己的源文件
1111111111111111111111111111111111111111111111
自己去查一下 fgets 函数的说明。上面清楚有写,该函数获取一整行字符,包含行尾的换行回车符,一块放到输入的 buffer 中。

换句话说,你的代码,执行过程中,对空格符的判断只有两种情况可能生效:
1. 整个文件末尾有空格无换行;
2. 一行字符数超过尺寸,且捕获的最后一个字符刚好是空格。

这不符合你所期待的结果。
楼主在 :
fprintf(s,"%s",sz);
后面加上:
fflush(s);

将字符串,刷新到s.
那这些空格前面有空格么?没有的话可以找到第一个空格的位置,然后把那个空格替换成'\0'
#include <stdio.h>
#include <string.h>
char ln[10000];
FILE *fi,*fo;
int i,L;
void main() {
    fi=fopen ("one.txt","r");
    if (NULL==fi) {
        printf("Can not open file one.txt!\n");
        return;
    }
    fo=fopen("two.txt","w");
    if (NULL==fo) {
        fclose(fi);
        printf("Can not create file two.txt!\n");
        return;
    }
    while (1) {
        if (NULL==fgets(ln,10000,fi)) break;
        L=strlen(ln)-1;
        if ('\n'==ln[L]) {
            ln[L]=0;
            if (L>0) {
                i=L-1;
                while (1) {
                    if (' '!=ln[i] && '\t'!=ln[i]) {
                        i++;
                        break;
                    }
                    if (i<=0) break;
                    i--;
                }
                ln[i]=0;
            }
            fprintf(fo,"%s\n",ln);
        } else {
            fprintf(stderr,"Warning: Line too long(>10000 characters).\n");
            fprintf(fo,"%s",ln);
        }
    }
    fclose(fo);
    fclose(fi);
}
《移动App测试实战》作者邱鹏:我在测试过程中遇到的那些坑 Rust一周精彩回顾:《高级Rust编程语言》、新增13名贡献者 来自Sony Morpheus的开发灵感: 如何打造逼真的VR游戏? 如何像巫师那样隔空操作——聊聊迷你雷达的原理和应用 等你来战——IBM Cloudant数据库开发大赛火热开启! 《近匠》360加固保,应用安全攻防的核心实现 DEFCON黑客大会抢鲜看:你所不知道的黑客大对决 MDCC2015中国移动开发者大会启动 七场专题技术论坛公布 【CTO讲堂】如何构建高性能网络服务平台及生态系统? mysql备份数据库批处理 《近匠》Remix周哲,让Android运行在“电脑”上! TIOBE 2015年8月编程语言排行榜:Java第一,Objective-C跌出前五 Oculus PC SDK 0.7版即将发布,含新Direct Driver Mode 【CTO讲堂】NoSQL对未来大数据发展的意义何在? 从Java转向Go——AeroFS的一段奇妙之旅 谷歌重组建母公司Alphabet,新来的CEO Sandar Pichai是什么来头? 《近匠》专访AllSeen联盟主席薛国栋:从通讯层为物联网去中心化 Android性能优化典范(三) 杭州兆合陈洋:微气象大民生,气象微信平台研发探索 【探秘ES6】系列专栏(十):更深入了解生成器 【探秘ES6】系列专栏(十一):类语法 《近匠》专访Depth VR:浅析VR交互技术选型中的瓶颈与机遇 【CTO讲堂】将“简单快速”渗透到移动开发测试每个环节,从fir.im团队说起 全球开发者报告:Windows Phone已死,Windows 10长存 苹果官方博客:从SDK详说Swift代码的改变 Espresso实战:快速的Android UI自动化测试 《Java并发编程的艺术》作者方腾飞:感谢Java,带我一路前行! Crystal:一个类似于Ruby语法的编程语言 谁将是传统密码的终结者 专访民生银行:CPOS平台如何从线下布局移动支付 MathWorks程邺:机器人时代未来已来 请问odbc方式和OLEDB方式有什么区别? 100询问:修改boot.ini仍无法实现双重启动. websphere的问题(1)? 我是第一次使用域.为什么无法在域控制器里增加用户?help me! 求助:模板的连接问题 strust 请问:哪里有人民邮电出版社的《个体软件工程》下载 ?(有分送) 存储过程执行出错,请帮忙看看!急! 请问:在sybase中的设备大小的设定,有没有一个标准?? include问题,屡试屡败 请问怎么才能用最简单的方法把程序做成服务? 程序设计文档怎么写啊?求教 不好意思,一个简单的问题 websphere的问题(2)? 请问如何实现模式窗口,就是当打开子窗口主窗口不能操作,除非关闭子窗口,如果有这样的网页也行 关于清华出版社出版的“微软.NET程序设计系列”之《ADO.NET程序设计》的问题,大家来讨论一下 如何用程序实现光驱的弹入弹出? 在线等了,各位帮忙了!! 我运行了一个网络管理软件出现乱码?而别的程序都没有乱码? 对话框上面显示视图,怎么办? 一道四级题有一点不明白的地方,谢谢各位高手帮我解决一下困惑。。 websphere的问题? 在一个对话框CDialog类中访问窗体视图类CFormView中的函数发生错误? 有关简繁体转换的问题 怎么分离这个字符串 aa|bb|cc|dd| ASP连接Oracle9i的连接字符串是什么? 请教:EXCEL中使用VB进行串口编 websphere的问题(4)? 如何在自己写的类的属性、方法在被使用的时候显示一些相关信息? 高分:大侠们,帮我看一下这个设计思路对吗?(在线等待!) 初级问题:请问用ASP开发BS结构程序,应该选什么工具啊 请教各位pb的可执行程序的分发 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 多谢awpking ,请进给你洒分. asp里调ActiveX控件,客户端却不能用,请帮助解决,100分相送。 如何让两个网段的电脑互相访问 在线等!打开文档的问题! HtmlHelp用法问题。急急!!1 只有在这问,关于笔记本网卡的驱动程序 我运行了一个网络管理软件时 这个软件显示的信息是乱码?而别的程序都没有乱码? 菜鸟的问题,大虾解决 本地安全策略打不开,怎么解决? 高分求教,如何让asp.net生成的网页转为pdf输出,在线等待 求救:用JMail发送邮件,用IIS的SMTP虚拟服务器,邮件都堵在Queue目录里发不出去 时间问题 在线等待 !!!没分啦!以后报答!! 为何执行int n=str.GetLength()后,n为0??? 急寻《基于XML电子公文格式规范》 初学 关于datagrid的问题 讨论用例分析技术 .net被我安在D盘,D盘下有一个WINNT目录被我删了,.NET就起不来了,我的系统在C盘 请简单演示一下向量的用法用C++ 实现 需要用到数组啊 居里夫人的三克镭分别有着怎样的由来 居里夫人的三克镭的由来 居里夫人的三克镭分别有着怎样的由来?请简洁概括 居里夫人的三克镭分别有着怎样的由来,请简要概括 所爱隔山海山海不可平甚么意思 ()海()天 ( )海( )天怎么写 已知lim x趋近于无穷(x+a/x-a)的x次方等于9,求常数a给个思路,求别给我写符号因为我实在看不懂 用语言叙述下好吗 我尽量理解 吧长方体截去一个角,剩下的几何体最多有( )个面? 简述马克思主义中国化的历史进程和形成的理论成果? 英《卫报》指美国安局监听35位外国领安倍批小泉纯一郎零核电政策非长远之策伊朗公开“神风”攻击无人机 用胶带组澳民众痴迷电脑游戏 50岁以上玩家超纽约长岛一垃圾袋内惊现死婴 婴儿或遭美油轮尼日利亚海域遭海盗袭击 2名船澳洲林火因部队实弹演习引发 强风致火雄性鱼深夜发奇怪求偶声 扰乱英国居民港媒:监控丑闻令美众叛亲离 “去美国欧盟针对美监控拟推新法规 科技企业或军演引发澳大利亚山火肆虐 一名灭火飞大胡同电商平台进天猫商城 “血拼”只电箱绿地被市民开发成“私人动物园” 市领导深入机场港口调研:发挥基础性先和气象专家聊聊雾霾 气象部门举办系列日本要求中国核裁军 欲牵制中国核战斗善于发现美 让好设计自己讲故事辜宽敏:党主席苏谢蔡都不够格 201人民币汇率下跌是进入贬值周期信号姜 虹“外包”医院太平间包掉了公益底色16条道路 8处积水点隐战热血逆乱小世界修仙传娱乐修真界未婚妻是明星神剑飞夺魄逃魂全民屠神永恒之帝大学生的那点事越界者的旅程魔道迷乱众生铁门关旅游罗布人村寨旅游云龙河地缝旅游香港迪士尼乐园快线旅游包公园旅游麻城五脑山森林公园旅游罗浮山旅游团岛旅游奇石峡漂流旅游大学城旅游崩密列旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘