欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

信息学奥赛一本通1162:字符串逆序

时间:2023-06-06
【题目链接】

ybt 1162:字符串逆序

【题目考点】 1、字符串 2、递归 【解题思路】

先去掉字符串末尾的’!’
递归输出逆序字符串

递归问题:输出字符串s的逆序字符串递归关系:设字符串s有l个字符,要想输出字符串s的逆序字符串,需要先输出s的最后一个字符,再输出s的前l-1个字符的逆序字符串递归出口:如果s是空字符串,直接返回 【题解代码】 解法1:使用字符数组 递归输出逆序字符串

#includeusing namespace std;void revShow(char s[], int len)//逆向输出字符数组s,s长度为len {if(len == 0)return;cout << s[len-1];revShow(s, len-1);}int main(){char s[1005];cin.getline(s, 1005);int len = strlen(s);s[--len] = '';//去掉最后的'!' revShow(s, len);return 0;}

解法2:使用string类 递归构造逆序字符串

#includeusing na#includeusing namespace std;string revStr(string s)//构造s的逆向字符串 {int len = s.length();if(len == 0)return string("");return s[len-1] + revStr(s.substr(0, len-1));//最后一个字符 连接 前len-1个字符的逆序 }int main(){string s;getline(cin, s);s.pop_back();//去掉最后的'!'cout << revStr(s);return 0;}

解法3:使用getchar(),递归完成逆序输出

#includeusing namespace std;void revChar(){char c = getchar();if(c == '!')return;revChar();cout << c;}int main(){revChar();return 0;}

解法4:非递归 字符串逆序输出

#includeusing namespace std;int main(){string s;getline(cin, s);s.pop_back(); for(int i = s.length() - 1; i >= 0; --i)cout << s[i];return 0;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。