Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C语言---递归反向输出任意长度的字符串

C语言---递归反向输出任意长度的字符串

作者头像
谙忆
发布于 2021-01-21 07:28:12
发布于 2021-01-21 07:28:12
1.5K01
代码可运行
举报
文章被收录于专栏:程序编程之旅程序编程之旅
运行总次数:1
代码可运行

(该字符串可以包含空格和回车!) 【题目要求】 编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能。 例如输入字符串:ABCD,输出字符串:DCBA。

【题目分析】 应用递归的思想有时可以很轻松地解决一些看似不太容易实现的功能。 本题就是利用递归方法解决这类问题的一个代表。要将一个字符串反向地输出,一般采用的方法是将该字符串存放到一个数组中,然后将数组元素反向地输出即可。 这样需要一个存储空间,而且字符串的长度无法自由掌握,因为数组是一种静态数据结构。如果选用动态生成的顺序表或者链表来存放字符串,那么实现起来会比较麻烦,特别是如果把字符串存放到单向链表中,反向输出是非常困难的。 如何才能输入任意长度的字符串,然后将其反向输出呢? 可以通过一个递归的方法巧妙地实现这个功能。 算法描述如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(){
    输入字符串的一个字符a:
    if(a!='#') print();
    if(a!='#') then 输出该字符a;
}

在该算法中,字符串的结束标志为#,并且#不作为字符串中的内容输出。首先输入字符串的一个字符,存放到变量a中:然后递归地调用函数print(),重复上述操作,知道输入字符串结束标志#为止;然后输出字符串中的字符。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
假设从屏幕上输入字符串ABC,并且以#作为结束标志,函数print()的递归过程如下图所示:

如上图所示,从屏幕上输入字符串ABC,并以#作为结束标志,然后反向输出该字符串,整个流程沿着图中箭头方向执行。因此输出的字符串与输入的字符串方向相反。

整个实现的C源代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <stdio.h>
#include <stdlib.h>
print(){
    char a ;
    scanf("%c",&a);
    if(a!='#'){
        print();
    }
    if(a!='#'){
        printf("%c",a);
    }
}
int main()
{
    printf("Please input a string ending for '#' :\n");
    print();
    return 0;
}

输出结果:

下面的是没实现递归的Java实现这个功能的完整代码: 而且貌似java也不能从控制端读入单个字符。。。。 所以并不能实现这个c能实现的递归功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.hncu;

import java.util.Scanner;

public class String1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String strs = "";
        while(true){
            int k=-1;
            String str = sc.nextLine();
            for(int i=0;i<str.length();i++){
                if(str.charAt(i)=='#'){
                    k=i;
                }
            }
            if(k==-1){
                strs = strs+str+"\r\n";
            }else{
                for(int i=0;i<k;i++){
                    strs = strs+str.charAt(i);
                }
            }
            if(k!=-1){
                break;
            }
        }

        for(int i=strs.length()-1;i>=0;i--){
            if(strs.charAt(i)=='\n'){
                System.out.println();
                i--;
                continue;
            }
            System.out.print(strs.charAt(i));
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/04/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【编程题】字符合集
前言: 小编在牛客网上发现了一个很有意思的题与大家分享一下,地址:字符集合_牛客题霸_牛客网
用户11288949
2024/09/24
750
【编程题】字符合集
搞定大厂算法面试之leetcode精讲20.字符串
方法1.截取字符串,循环字符串,遇到#就截掉最后一个字符,循环完毕之后,最后比较两个去除掉#退格之后的字符串是否相等,时间复杂度O(m+n),m、n是两个字符串的长度。空间复杂度O(1)
全栈潇晨
2021/12/04
7080
Go 字符串反转问题解决思路
大三上学期即将结束,按照自己的计划,大三下学期就要在网上投简历找工作了。还是有点忐忑的,接下来的日子准备沉淀沉淀自己的知识,尤其是数据结构和算法,因此我在图书馆借了两本名叫《编程之法》和《进军硅谷程序员面试揭秘》的书,打算用作我的学习。决定以后抽时间将书上的内容尽可能的吃透。公众号也随之更新我的心得和笔记。练习的代码会同步托管的到码云上,可以公众号回复码云获取我的仓库,觉得还行的话,麻烦大家点个星,在我面试的时候,希望可以拿这当作我的一个亮点,提前谢谢大家了。
陌无崖
2020/07/27
8760
【算法】字符串算法技巧系列
String a = “abcdefg” char[] a1= a.toCharArray()
三三是该溜子
2025/01/13
1000
【算法】字符串算法技巧系列
java字符串练习题1、反向输出字符串
反向输出字符串,这里的含义是给定一个字符串例如:我爱你,反向输出的结果就是:你爱我。
红目香薰
2023/01/10
4100
java字符串练习题1、反向输出字符串
HDOJ(HDU) 1860 统计字符
Problem Description 统计一个给定字符串中指定的字符出现的次数
谙忆
2021/01/21
3440
C语言 第七章 数组与字符串
根据文章内容和问答,对文章内容进行总结和梳理,提炼出关键信息和主要观点,以简洁明了的方式呈现。
张果
2018/01/03
8180
C语言 第七章 数组与字符串
HDOJ 2131 Probability
Problem Description Mickey is interested in probability recently. One day , he played a game which is about probability with mini.First mickey gives a letter and a word to mini.Then mini calculate the probability that the letter appears in the word.For example,give you the letter “a” and the word “apple”. the probability of this case is 0.20000.
谙忆
2021/01/21
1830
HDOJ 2029 Palindromes _easy version(回文串)
Problem Description “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。请写一个程序判断读入的字符串是否是“回文”。
谙忆
2021/01/20
1870
Contest1620 – 2020-2021-2学期《Java Web 系统开发》:java基础:字符串
对输入的字符串进行遍历,charAt访问string字符串字符,大写英文字母字符65-90;小写英文字符97-122,要记住。java字符串可以直接拼接,并且string拼接后的字符串其实是jvm中新的一个字符串,这也是为什么使用太多字符串常量消耗空间,这里说多了。直接判断后进行拼接即可,输出str2。
废江_小江
2022/09/05
3170
Contest1620 – 2020-2021-2学期《Java Web 系统开发》:java基础:字符串
Java---练习(面试题) :字符串截取(1)
在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符。 但对应的字节数不同,一个汉字占两个字节。 定义一个方法,按照指定的字节数来取子串。 如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃。如果取四个字节就是“ab你”,取五个字节还是“ab你”。
谙忆
2021/01/21
3030
HDOJ 2017 字符串统计
Problem Description 对于给定的一个字符串,统计其中数字字符出现的次数。
谙忆
2021/01/20
4180
摩拜 [编程题] 字符串问题
版权声明:本文为博主-姜兴琪原创文章,未经博主允许不得转载。 https://blog.csdn.net/jxq0816/article/details/83904964
week
2018/12/07
3050
JAVA算法:回文字符串相关问题详解(回文字符串总结)
在求解这个问题的时候,一定要看清楚问题。不要混淆“子串”和“子序列”的概念。“子串”是指在源字符串中连续出现的字符串片段;而“子序列”是指在源字符串中可以不连续出现的字符串片段。一个连续,一个不连续。
全栈程序员站长
2022/09/01
8310
HDOJ 2024 C语言合法标识符
Problem Description 输入一个字符串,判断其是否是C的合法标识符。
谙忆
2021/01/20
4230
C语言字符数组-学习十四
注意:这里不用单个字符作为初值。而是用一个字符串作为初值。数组c的长度不是10,而是11,因为字符串常量的最后由系统加上一个'\0'。
XG.孤梦
2022/02/28
1.9K0
C语言字符数组-学习十四
java算法刷题01——字符串、数组、集合、基本数据类型
字符串、集合、数组、基本数据类型是java里最基础的知识点,但也是频频被使用的,在算法题里属于高频基础题,下面结合一些题目来学习这些知识点。
半旧518
2022/10/26
1K0
试题 算法提高 字符串顺序比较
  比较两个字符串s1和s2,输出:0表示s1与s2相等;1表示s1的字母序先于s2;-1表示s1的字母序后于s2
SingYi
2022/07/13
2410
稳准狠!最全讲解!初学者必看的C语言字符串知识
字符数组和普通数组一样,也是通过下标引用各个元素。 【示例】输出字符数组中的元素。
老九君
2018/08/22
5490
稳准狠!最全讲解!初学者必看的C语言字符串知识
笔试题—字符串常见的算法题集锦
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/52602327
程序员徐公
2018/09/18
9600
相关推荐
【编程题】字符合集
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档