C语言---递归反向输出任意长度的字符串
(该字符串可以包含空格和回车!)
【题目要求】
编写一个递归函数,实现将输入的任意长度的字符串反向输出的功能。
例如输入字符串:ABCD,输出字符串:DCBA。
【题目分析】
应用递归的思想有时可以很轻松地解决一些看似不太容易实现的功能。
本题就是利用递归方法解决这类问题的一个代表。要将一个字符串反向地输出,一般采用的方法是将该字符串存放到一个数组中,然后将数组元素反向地输出即可。
这样需要一个存储空间,而且字符串的长度无法自由掌握,因为数组是一种静态数据结构。如果选用动态生成的顺序表或者链表来存放字符串,那么实现起来会比较麻烦,特别是如果把字符串存放到单向链表中,反向输出是非常困难的。
如何才能输入任意长度的字符串,然后将其反向输出呢?
可以通过一个递归的方法巧妙地实现这个功能。
算法描述如下:
print(){
输入字符串的一个字符a:
if(a!='#') print();
if(a!='#') then 输出该字符a;
}
在该算法中,字符串的结束标志为#,并且#不作为字符串中的内容输出。首先输入字符串的一个字符,存放到变量a中:然后递归地调用函数print(),重复上述操作,知道输入字符串结束标志#为止;然后输出字符串中的字符。
假设从屏幕上输入字符串ABC,并且以#作为结束标志,函数print()的递归过程如下图所示:
如上图所示,从屏幕上输入字符串ABC,并以#作为结束标志,然后反向输出该字符串,整个流程沿着图中箭头方向执行。因此输出的字符串与输入的字符串方向相反。
整个实现的C源代码:
#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能实现的递归功能。
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));
}
}
}
C语言---递归反向输出任意长度的字符串的更多相关文章
- Python学习(三) 输出任意格式的字符串以及字符串的切片
在Python中想要输出一句话,如下 a='hello world' print a //打印出的是hello world print 'hello \n world' //打印出的是 //hello ...
- Java工具类_随机生成任意长度的字符串【密码、验证码】
import java.util.Random; public class PasswordCreate { /** * 获得密码 * @param len 密码长度 * @return */ pub ...
- 使用printf输出各种格式的字符串( 转载)
1. 原样输出字符串: printf("%s", str); 2. 输出指定长度的字符串, 超长时不截断, 不足时右对齐: printf("%Ns" ...
- 任意长度的正小数的加法(YT新人之巅峰大决战05)
Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明 ...
- [c++]大数运算1---利用C++ string实现任意长度正小数、整数之间的加减法
一.概述 本文属于大大维原创,未经笔者本人允许,严禁转载!!! C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-429496 ...
- [c++]大数运算---利用C++ string实现任意长度正小数、整数之间的加减法
本文为大大维原创,最早于博客园发表,转载请注明出处!!! 一.概述 C/C++中的int类型能表示的范围是-2E31-2E31–1.unsigned类型能表示的范围是0-2E32–1,即 0-4294 ...
- 随机生成指定长度字符字符串(C语言实现)
相关函数 srand(), rand()头文件#include<stdlib.h> 定义函数 int rand(void) 函数说明 rand()会返回一随机数值,范围在0至RAND_MA ...
- 串口应用:遵循uart协议发送N位数据(状态优化为3个,适用任意长度的输入数据,取寄存器中的一段(用变量作为边界))
上一节中成功实现了发送多个字节的数据.把需要发送的数据分成多段遵循uart协议的数据依次发送.上一节是使用状态机实现的,每发一次设定为一个状态,所以需要发送的数据越多,状态的个数越多,代码越长,因而冗 ...
- 生成任意长度的随机数 JS
1.Math.random().toString(36).substr(2); 结果:ywv6cnpkliahj4tep0 2. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
随机推荐
- 【待解决】编译V8引擎出错-snapshot.cc
这几天学习nodejs,翻阅官网的API文档.看到nodejs插件时,想了解一下v8的实现机制,于是我便从GitHub社区克隆了一份v8源码库.哪知道,编译安装的时候就出了问题,这问题已经折磨我两天了 ...
- C++笔试题库-------Coding整理
1. 反转字符串 char* strrev1(const char* str) { int len = strlen(str); ]; char *p = temp + len; *p = '\0'; ...
- navicat导入mysql数据库sql时报错或数据不完全问题
错误详情:[Err] [Imp] 2006 - MySQL server has gone away 或无提示错误,但是导入数据明显缺少字段和数据 找到服务器上的MYSQL安装目录下的my.ini文件 ...
- Log4net 配置注意事项
1. 首先引入Log4net程序集 2.修改webconfig配置文件 在 configuration 节点下面添加如下节点 <configSections> <section na ...
- JavaScript细节整理
JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda)等等.JavaScript还是 ...
- urlwrite伪静态(SAE、PHP、JSP)
在SAE里,直接配置config.yaml文件,文件可以配置的内容包含: 目录默认页面 自定义错误页面 压缩 页面重定向 页面过期 设置响应Header的Content-Type appname: x ...
- 运行phpize时出现:Cannot find autoconf. Please check your autoconf installation
运行/usr/local/webserver/php/bin/phpize时出现:Configuring for:PHP Api Version: 20041225Zend Module Api No ...
- [转]Delphi 关键字详解
全文链接地址:http://www.cnblogs.com/del/archive/2008/06/23/1228562.html
- [技术翻译]Guava-libraries(一): 用户指导
用户指导 本文翻译自http://code.google.com/p/guava-libraries/wiki/GuavaExplained,由十八子将翻译,发表于博客园 http://www.cnb ...
- 分享一个md5类
这个md5干嘛用的,大家比我清楚就不说了,这里不是讲md5的原理.要讲md5的原理,网上一大堆,我也不是什么算法很厉害的人,我只是算法搬运工.咱是一般程序员,有时候能完成业务需要就可以,那些伟大算法的 ...