zoj-1151

来源:互联网 发布:巴丁算法集app 编辑:程序博客网 时间:2024/06/05 22:33

简单的反转字符问题

首先如果想解决这个问题应该先理清思路对吧。

1.1与3的含义是什么

2.如何很好地去是用空格这个重要的管理因素

3.如何输出


明确了三大问题之后就可以开始思路了

一开始我写了一个函数:daozhi,这个函数其实写的很不好,他主要的作用是先判断之后倒置输出,让后在主函数中判断循环使用函数。很糟糕!

#include<iostream>
#include<iomanip>
#include<string>
#include<cstring>
using namespace std;
void daozhi(char* a,int i)
{
if((int)a[i]!=32&&(int)a[i]!=49) 
{
int num=0;
for(num;;num++)
{
if(a[i]+num==' '||a[i]+num=='1') break;
}
for(int k=i+num;k=i;k--)
{
cout<<a[k];
}
}

}
int main()
{
char a[20][100]={'1'};//一百个上线单词,每个单词最多二十个字符
 
int n;cin>>n;
for(int i=1;i<=n;i++)
{
int cc=0;char heihei;
heihei=getchar();
while(cin>>a[i][cc]&&getchar()!='\n')
{
cc++;cout<<cc;
}
int num=0;
for(int s=0;s<100;s++)
{
if((int)a[i][s]!=32&&(int)a[i][s]!=49&&(int)a[i][s-1]==32||s==0) daozhi(a[i],s);

}
}
}

之后看了一些别人的AC,学习了如何使用fgets函数!

fgets函数:

格式:

char *fgets(char *buf, int bufsize, FILE *stream);
含义:把输入的前bufsize-1个吞掉赋值给buf字符数组并在结位添加上一个'\0'
分枝情况:如果填不满buf-1则默认为成功赋值,并且会返回赋值的情况(包括回车符也会输出)
  如果超过了buf-1,则会返回前buf-1个字符并且原输入的字符中的前buf-1个消失
ex:
char a[10];
cout<<sizeof(a)<<endl;
fgets(a,sizeof(a),stdin);
cout<<fgets(a,sizeof(a),stdin);
若输入123456789000
则会输出000
(回车)
--------------------------------
Process exited after 3.928 seconds with return value 0
请按任意键继续. .
.
因为吞掉了前九个之后还有四个,四个才会纳入第二个fgets。
注意:fgets可以吞掉回车\n
所以在这里附上正确的代码

#include<iostream>  
#include<cstdio>  
#include<cstring>  
using namespace std;  
int t,n;  
char a[500];  
int main()  
{  
    cin>>t;  
    while(t--){  
        getchar();  
        scanf("%d\n",&n);  
        while(n--){  
            fgets(a,sizeof(a),stdin);  
            int len=strlen(a)-1;  
            int i=0;  
            for(int j=0;j<len;j++){  
                if(a[j]==' '){  
                 for(int k=j-1;k>=i;k--) cout<<a[k];cout<<" ";i=j+1;}  
            }  
            for(int j=len-1;j>=i;j--) cout<<a[j];  
            cout<<endl;  
        }  
        if(t){  
        cout<<endl;}  
        }  
}