码迷,mamicode.com
首页 > 其他好文 > 详细

字符串-07. 说反话-加强版 (20)

时间:2015-02-20 09:46:31      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:pat   acm   

题目来源:

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

输出格式:每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

输入样例:
Hello World   Here I Come
输出样例:
Come I Here World Hello

Java版本:

import java.io.IOException;
import java.text.ParseException;
import java.util.Scanner;



/*
 * */
public class Main {

  public static void main(String[] args) throws ParseException, IOException {
    
  
    Scanner scanner = new Scanner(System.in);
    //输入一组单词,去除掉前后空格
    String str = scanner.nextLine().trim();
    
    //去除掉单词间的空格,可能不只有一个空格,因此用" +"表示至少一个空格
    String[] strs = str.split(" +");
    for(int i=strs.length-1;i>=0;--i)
    {
      
        System.out.print(strs[i]);
        if(i!=0)
          System.out.print(" ");
     
      //不是最后一个单词,就输出一个空格
      
    }
    
  }
}
  


  
  
  
  
  
  
结果正确,但是对于部分测试点会超时,因此要用c语言,c语言代码是从网上找的,测试过有效

#include <stdio.h>
#include<string.h>

/*
这道题的出错有两个地方,一是*pp[]的大小设置,要考虑到最极端的情况;
二是当输入为空格的时候,输出是什么?? 
*/
int main(int argc, char *argv[])
{
	
	
	char s[500001];
	char *p,*pp[250001];
	long i=0,j,k;
	gets(s);
	//printf("%s\n",s); 
	p=strtok(s," ");
	pp[0]=p;
	//printf("---%s",p);
	i++;
	p=strtok(NULL," ");
	
	while(p){
		pp[i++]=p;
		
		//printf("----%s",p);
		p=strtok(NULL," ");
	}
	for(j=i-1;j>=0;j--){
		if(pp[j]){
			if(j==0){
			printf("%s",pp[j]);
		}else{
			printf("%s ",pp[j]);
		}
		}
		
	}
	return 0;
}

scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。若想从键盘上输入字符串"hi hello",则应该使用__gets__函数。

gets可以接收空格;而scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。

char string[15]; gets(string); /*遇到回车认为输入结束*/

scanf("%s",string); /*遇到空格认为输入结束*/


函数原型:char *strtok(char *s, char *delim);

函数功能:把字符串s按照字符串delim进行分割,然后返回分割的结果。

函数使用说:

1.strtok函数的实质上的处理是,strtok在s中查找包含在delim中的字符并用NULL(’/0′)来替换,直到找遍整个字符串。这句话有两层含义:(1)每次调用strtok函数只能获得一个分割单位。(2)要获得所有的分割单元必须反复调用strtok函数。

2.strtok函数以后的调用时的需用NULL来替换s.

3.形参s(要分割的字符串)对应的变量应用char s[]=”….”形式,而不能用char *s=”….”形式。

例子如下:

#include <stdio.h> 

#include <string.h>

int main(void)

{

      char buf[]=”Golden Global View”;

      char* token = strtok( buf, " ");

      while( token != NULL )

      {

           printf( ”%s “, token );

           token = strtok( NULL, ” “);

      }

      return 0;

}

其结果为:

Golden

Global

View

参考:

http://blog.csdn.net/js_xj/article/details/5863734

http://blog.csdn.net/js_xj/article/details/5863734


字符串-07. 说反话-加强版 (20)

标签:pat   acm   

原文地址:http://blog.csdn.net/ch717828/article/details/43883311

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!