题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=151
题意:字符串反转,用栈、STL、C语言都能做,用栈做比较简单明了,不易出错。STL也很好,只是不太熟。
1.栈的做法
#include<stdio.h> #include<iostream> #include<stack> #include<string.h> using namespace std; int main(){ int T,n; char s[10100]; stack<char> sta; cin >>T; while(T--){ scanf("%d%*c",&n);//吸收空格 while(n--){ gets(s); while(!sta.empty())//清空栈 sta.pop(); int len=strlen(s); for(int i=0;i<len;i++){ if(s[i]!=' ') //如果不是空格,入栈 sta.push(s[i]); else{ //如果是空格,出栈 while(!sta.empty()){ printf("%c",sta.top()); sta.pop(); } printf(" "); } if(i==len-1){//如果这一行结束,则输出栈内结果 while(!sta.empty()){ printf("%c",sta.top()); sta.pop(); } printf("\n"); } } } if(T) printf("\n"); } return 0; }
2.c++ STL方法
<span style="font-size:18px;">#include<stdio.h> #include<string.h> #include<string> #include<sstream> #include<iostream> #include<algorithm> using namespace std; char a[10100],c[10100]; int main(){ int T,N; cin >> T; while(T--){ string s,buf; cin >> N; getchar();//吸收回车 while(N--){ getline(cin,s); stringstream ss(s); int ok=1; while(ss >> buf){ if(ok) ok=0; else cout << " "; reverse(buf.begin(), buf.end());//字符串反转 cout << buf; } cout << "\n"; } if(T) cout << endl; } return 0; }</span>
<span style="font-size:18px;">#include<stdio.h> #include<string.h> #include<iostream> using namespace std; char a[10100],c[10100]; int main(){ int T,N; scanf("%d",&T); while(T--){ scanf("%d%*c",&N); while(N--){ int ok=1; gets(a); int zero=0; for(int i=0;i<strlen(a);i++){ if(a[i]!=' ') c[zero++]=a[i]; if(a[i]==' '){ for(int j=zero-1;j>=0;j--){ if(c[j]==' '&&ok){ ok=0; } else printf("%c",c[j]); } printf(" "); zero=0; }else if(i==strlen(a)-1){ for(int j=zero-1;j>=0;j--) printf("%c",c[j]); printf("\n"); } } } if(T) printf("\n"); } return 0; }</span>