c语言-【编程题】替换空格,在线测试系统显示程序异常退出

问题描述

【编程题】替换空格,在线测试系统显示程序异常退出

题目描述

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

我的编程思想是先统计空格个数blankCount,由此算出替换后的字符串长度tLength,后来通过下标从后面往前面替换,这样遇到空格插入%20,否则将字符后移。

我的程序:

class Solution {
public:
    void replaceSpace(char *str,int length) {
        int blankCount = 0, i = 0;
        while(str[i] != NULL) {
            if(str[i++] == ' ') {
                blankCount++;
            }
        }
        int tLength = blankCount * 2 + length;
        int j = 0;
        for(i = 0; i <= length; i++) {
            if(str[length - i] == ' ') {
                str[tLength - j++] = 48;
                str[tLength - j++] = 50;
                str[tLength - j++] = '%';
            }
            else {
                str[tLength - j++] = str[length - i];
            }
        }
    }
};

显示结果:
运行错误,你提交的程序运行时发生错误。

自查了半天好像没有溢出什么的。。。

解决方案

http://www.xuebuyuan.com/1410069.html

解决方案二:

1楼
综合上面链接的内容,发现void replaceSpace(char *str,int length)中的length变量应该不代表字符串实际长度(实际长度不包含NULL结束符),在第十行添加int l = i,并把之后的length变量全部改成 l 变量,结果系统提示运行正常且答案正确
但是问题来了,那length到底代表什么呢?如果是字符串空间总长度的话,那我不加if(tLength > length) return 1;的判定结果也没出错啊,这是一个void函数不能加return语句

修改后的代码:

 class Solution {
public:
    void replaceSpace(char *str,int length) {
        int blankCount = 0, i = 0;
        while(str[i] != NULL) {
            if(str[i++] == ' ') {
                blankCount++;
            }
        }
        int l = i;
        int tLength = blankCount * 2 + l;
        int j = 0;
        for(i = 0; i <= l; i++) {
            if(str[l - i] == ' ') {
                str[tLength - j++] = 48;
                str[tLength - j++] = 50;
                str[tLength - j++] = '%';
            }
            else {
                str[tLength - j++] = str[l - i];
            }
        }
    }
};

系统返回结果:
答案正确:恭喜!您提交的程序通过了所有的测试用例

解决方案三:

溢出了,应该再减1.........

解决方案四:

因为要将一个空格字符换成 %20 是三个字符,所以需要重新分配空间。否则,如果保证原字符串的空间是足够的,来放修改后的、变长的字符串。

时间: 2024-08-08 00:20:03

c语言-【编程题】替换空格,在线测试系统显示程序异常退出的相关文章

c语言-两道C语言编程题:求教各位大神

问题描述 两道C语言编程题:求教各位大神 两元一瓶啤酒,两个啤酒瓶换一瓶啤酒,四个啤酒瓶盖换一瓶啤酒,输入的金额可以买几瓶. 输入一串字符串,写两个函数,第一个函数使输入的字符串全都后移一位,第二个函数将字符串中的字母大写换小写,小写换大写?. 拜托各位了 谢谢~ 解决方案 第一个问题描述不清,不知道是不是可以借啤酒瓶和瓶盖,我的程序按照不可以编写: #include <stdio.h>int foo(int money){ int c = money / 2; int c1 = 0; int

函数调用-C语言编程题,插入求和函数,排序函数。么有错误,但结果不对!

问题描述 C语言编程题,插入求和函数,排序函数.么有错误,但结果不对! 定义一个包括学号.姓名及三门课的成绩和总分的结构体,利用该结构体说明一个包含五个人的结构体数组.从键盘输入五个人的基本信息.计算总分,并根据总分排序输出一个成绩单! 解决方案 show us the code加个断点调试吧看看每次排序后的顺序是否如预期结果 解决方案二: 这个代码也没贴出来,怎么知道问题出在哪里 解决方案三: 复 6楼 newdos#include void shuru(void);void qiuhepai

出现频率-一道C语言编程题,本人初学者,求大神解答

问题描述 一道C语言编程题,本人初学者,求大神解答 编写程序实现功能:数据文件story.txt是一篇英文小故事,请先统计其中26个字母的出现次数. 要求一:再根据用户要求,输出某个字母的出现次数,直到用户输入#为止. 要求二:请输出出现频率最高的三个字母和它们的出现次数. 解决方案 #include #include #include int main() { int alpha[26]={0}; //用于计数26个字母出现的次数 FILE *text; //FILE 指针 char ch;

编程c语言-c语言编程题,请老师们帮帮我,谢谢

问题描述 c语言编程题,请老师们帮帮我,谢谢 已知一个长度为2015的整型数组,数组里的数据的大小为递增关系,请编写一个函数找到数组中值为2015的数,并返回该数在数组中的位置,未找到则返回-1. 解决方案 第一种方法:直接从头到尾遍历一次数组即可,时间复杂度为O(n) 第二种方法:二分查找法,时间复杂度为O(logn) 有思路了,写代码就比较简单了,就这 解决方案二: int position(int a[2015]) { int k = 2015; int low, high, mid; l

Android编程实现捕获程序异常退出时的错误log信息功能详解

本文实例讲述了Android编程实现捕获程序异常退出时的错误log信息功能.分享给大家供大家参考,具体如下: 很多时候我们程序无缘无故的就挂掉了,让我们一头雾水,如果刚好我们在调试,那我们可以通过错误log来查看是什么原因引起的程序崩溃.但是当我们把程序发别人使用时,就没那么好运了,那我们要怎么样才能捕获到那个错误异常呢?还好Android给我们提供了UncaughtExceptionHandler 这个类,我们可以通过实现这个类的接口,来全局捕获那个让程序崩掉的错误log信息.可以将错误的lo

计算机科学-第1周 三道C语言编程题

<计算机科学>课程主页在:http://blog.csdn.net/sxhelijian/article/details/13705597 作为预热,在课堂上与法学院的学生一起编了三道程序,有同学希望在博客上看到.这是此文来历. 1. [要减肥吗?] 女性的标准体重是:身高(厘米)-100= 标准体重(公斤),超过标准体重20%以上者为肥胖,低于标准体重20%的为偏瘦,在肥胖与偏瘦之间为正常.请编一个为女孩子们评价自己体重情况的程序,输入身高(cm)与体重(kg)的值,输出评价价结果:肥胖时输

语言编程 使用函数-C语言编程(使用函数)

问题描述 C语言编程(使用函数) 编写一个程序,其功能是将用户输入的一段英文(注意包含空格.逗号.句号及英文字母)分离出单词,并以每个单词出现的次数从高到低输出单词及其次数,次数相同的单词以其对应字符串大小升序输出.(使用函数) 解决方案 http://zhidao.baidu.com/link?url=cvC7aAt1csYj4nG1yDnsX4HJ7Kf5Vxfhe5iJHE4CGfgV62Gx04h86aNwgyFDFpB5oWpMJPS2ktQ7P-7NLP7H6a 解决方案二: htt

单链表-请教C编程题,本人初学者,求大神解答,万分感谢

问题描述 请教C编程题,本人初学者,求大神解答,万分感谢 求大侠帮忙:C语言程序设计---编程题说明:以下所有题目程序应是非递归的) 编写一个函数,输出整数m的全部素数因子.例如,m=120时,素数因子为:2,2,2,3,5 请编写程序判断一个字符串是否是回文.若是回文,函数返回值为1,否则返回值为0.(回文是顺读和倒读都一样的字符串).要求: 1) 编写sub()判断一字符串是否为回文 2) 在主函数中完成数据的输入与结果的输出 3.起泡排序是把大的元素向下移,也可以将小的元素向上移,请给出下

acm poj-关于北大在线测试系统(POJ)第1002题

问题描述 关于北大在线测试系统(POJ)第1002题 晚辈前不久迷上了POJ,目前已经实现了这题(第1002题),并且优化到了188ms,希望高手能告知进一步优化的方法,我希望能进入100ms以内,多谢前辈们指点! 目前我已经知道性能瓶颈是fgets()这个函数上,它大概花了和排序相同的时间 scanf(),gets()我都试过了,效率没有fgets()高 而fread()在读取stdin的时候又没办法及时地跳出来,所以没法使用 (比如说,用fread从一个只有1000字节的文件中读取10000