• HDU 1062 Text Reverse 字符串反转


    简单的字符串处理,第一种方法就是用数组存这些字符串,用 j 来记录进度的长度,注意gets()会在字符串的结束添加''。


    #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]!=''){
                            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("
    ");
        }
        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=='
    '||ch==EOF)
    			{
    				while(!s.empty())
    				{
    					printf("%c",s.top()); 
    					s.pop(); /*清除栈顶元素*/
    				}
    				if(ch=='
    '||ch==EOF)  
    					break;  /*绝对不能少,控制输出结束*/
    				printf(" ");
    			}
    			else
    				s.push(ch);
    		}
    		printf("
    ");
    	}
    	return 0;
    }


  • 相关阅读:
    利用树莓派把普通打印机变成网络打印机方法
    Python之datetime库
    CentOS7从默认/home中转移空间到根分区/
    更改Azure虚拟机账号密码
    创建一个托管磁盘的Windows定制镜像
    IO多路复用详解
    玩转redis
    EF Linq to Sql 多表left join查询并对结果group by分组之后进行count,max等处理
    免费,主流的在线办公/协作,会议,文档,调查,分享工具推荐(持续维护中)
    多sql查询count合并为一行
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256483.html
Copyright © 2020-2023  润新知