HDU 1062 Text Reverse 字符串反转
简单的字符串处理,第一种方法就是用数组存这些字符串,用 j 来记录进度的长度,注意gets()会在字符串的结束添加'\0'。
#include <cstring> #include <cstdio> #include <iostream> using namespace std; char str[1005]; using namespace std; int main(){ int T,i,j; int bhd,frt; int len; cin>>T; getchar();//吃掉输入次数后的空格,在字符串处理中经常用到的小技巧,开始把这个放到了gets上面,结果每次第二次输入的字符串len都会少1,就是getchar吃掉了 for(i=0;i<T;i++){ gets(str); len = strlen(str); j=0; for(;j<len;j++){ bhd=j; while(str[j]!=' '&&str[j]!='\0'){ j++; } frt=j-1; for(;frt>=bhd;frt--) cout<<str[frt]; if(str[j]==' ') cout<<" "; } cout<<endl; } return 0; }做完了看了下其他人的做法,一下是另一个思路,但是有瑕疵
#include<stdio.h> #include<string.h> 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<len;i++) { if(s1[i]!=' ') s2[j++]=s1[i]; /*保存单词*/ else { if(t>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; }
判断一段字符串里面的空格和结束时来反转一个个单词的方法,但是只有一个字符串只有一个单词的时候输出的一个单词前面会打出一个空格,虽然有瑕疵,但是OJ能AC。
下面用栈的方法,栈暂时没学,先记录于此,此方法转载自lyhvoyage。
#include<stdio.h> #include<stack> using namespace std; int main() { int n; char ch; scanf("%d",&n); getchar(); /*吸收回车符*/ while(n--) { stack<char> 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; }