HDU 1062 Text Reverse
发布日期:2021-10-23 09:05:12 浏览次数:2 分类:技术文章

本文共 1950 字,大约阅读时间需要 6 分钟。

题目链接:

题意:转置一个字符串内的所有单词。

解法:读取‘ ’或‘\0’作为一个单词结束的标记,可用头文件<string.h>里的strrev函数转置单词,比较方便。也可以采用字符压栈的方法来转置单词(利用堆栈的先进后出性质)。或者用最传统的方法,数组存放字符,然后转置。

AC:

//用strrev函数实现,需要注意的是,部分编译器不支持非标准库函数strrev。

#include 
#include
using namespace std;int main(){ int n,l,j; cin >> n; getchar(); while(n--) { char p[1010],temp[1010]; gets(p); l = strlen(p),j=0; for(int i = 0 ; i <= l ;i ++) { if(p[i] == ' ' || p[i] == '\0') { j = 0; strrev(temp); if(p[i] == ' ') cout << temp << ' '; else cout <

 

//用堆栈的方法实现。

#include
#include
using namespace std;int main(){ int n; char ch; scanf("%d",&n); getchar(); /*吸收回车符*/ while(n--) { stack
s; /*定义栈*/ while(true) { ch=getchar(); /*压栈时,一次压入一个字符*/ if(ch==' '||ch=='\n'||ch==EOF) { while(!s.empty()) { printf("%c",s.top()); s.pop(); /*清除栈顶元素*/ } if(ch=='\n'||ch==EOF) break; /*绝对不能少,控制输出结束*/ printf(" "); } else s.push(ch); } printf("\n"); } return 0;}

 

 

//用数组的方法实现

 

#include
#include
int main(){ int i,n,len,j,k,t; char s1[1005],s2[100]; scanf("%d",&n); getchar(); while(n--) { gets(s1); len=strlen(s1); for(i=0,j=0,t=0;i
0) printf(" "); /*控制格式*/ for(k=j-1;k>=0;k--) printf("%c",s2[k]); /*反转输出*/ j=0; t++; } if(i==len-1) /*反转最后一个单词,这里要特别注意*/ { printf(" "); for(k=j-1;k>=0;k--) printf("%c",s2[k]); } } printf("\n"); } return 0;}

 

 

需要注意:

strlen不计算字符串结尾的‘\0’ 

用getchar()读取t后的一个回车,避免编译器认为回车为第一个字符串.

temp字符串重新定义后加上'\0'.

 

转载于:https://www.cnblogs.com/zz990728/p/8881797.html

转载地址:https://blog.csdn.net/weixin_30549657/article/details/95791006 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Node Security
下一篇:Hibernate实现增删改查

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月07日 01时23分32秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章