专栏首页NLP小白的学习历程Text Reverse HDU - 1062 字符串处理,空格切分。

Text Reverse HDU - 1062 字符串处理,空格切分。

Text Reverse HDU - 1062

Ignatius likes to write words in reverse way. Given a single line of text which is written by Ignatius, you should reverse all the words and then output them.

Input

The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow. Each test case contains a single line with several words. There will be at most 1000 characters in a line.

Output

For each test case, you should output the text which is processed.

Sample Input

3 olleh !dlrow m'I morf .udh I ekil .mca

Sample Output

hello world! I'm from hdu. I like acm.

Hint

Remember to use getchar() to read '\n' after the interger T, then you may use gets() to read a line and process it.

该题目的意思就是说要字符串反转,也就是说对于用空格分开的每一个字符串,需要对这个单独的字符串执行反转操作,这是我最初的理解,即每个字符串中间有一个空格,但是,事实上,这并不一定是符合正确格式的句子,所以,字符串之间的空格数量不一定为1;也就是说字符串和字符串之间可能有多个空格,同时,在整个字符串的最后,可能还有一大堆空格,所以,不能简单地使用库函数中的字符串分割函数,如下:

	string str;
    	getline(cin,str);
    	int cnt=0;
    	for(int i=0;i<str.size();i++)
    	{
    		if(str[i]==' ')
    		{
    			cnt++;
			}
		}
		string s[cnt+1];
		istringstream is(str);//根据空格切分为多个字符串
   		for(int i=0;i<cnt+1;i++)
   		{
   			is>>s[i];
   			reverse(s[i].begin(),s[i].end());
		}
		for(int i=0;i<cnt+1;i++)
		{
			cout<<s[i];
			if(i!=cnt)
				cout<<" ";
		 }
		cout<<endl;		

很显然,这样想的太简单了,wrong answer

然后呢,就只能正常的做这个题目了,AC代码如下:

#include <iostream>
#include <cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include <sstream>

using namespace std;

int main()
{
	int n;
	cin >> n;
	int temp = getchar();
	while (n--)
	{
		string str;
		getline(cin, str);
		int i = 0;
		int flag[1000];
		memset(flag, 0, sizeof flag);
		while (i < str.size())
		{
			if (str[i] == ' ')
			{
				flag[i] = 1;
			}
			i++;
		}
		int start = 0;
		i = 0;
		while (i < str.size())
		{
			if (flag[i] == 1)
			{
				for (int j = i - 1; j >= start; j--)
				{
					cout << str[j];
				}
				start = i + 1;
				cout << ' ';
			}
			if (i == str.size()-1)
			{
				for (int j = i; j >= start; j--)
				{
					cout << str[j];
				}
			}
			i++;
		}
		cout << endl;
	}
	return 0;
}

重点:cin在读入数据之后,会停留在行末进行等待,这时候,如果使用getline,等读入时,读入的是换行符,而不是下一行字符,当然,这也是cin读入数据比较慢的原因,没读完一行数据,就要等待,而不是直接进入下一行读取。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 迷宫问题 最短路+路径输出POI 3984

    它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

    种花家的奋斗兔
  • Lake Counting(POJ No.2386)

    种花家的奋斗兔
  • 有关C++中的memset和fill

    因为memset函数按照字节填充,所以一般memset只能用来填充char型数组,(因为只有char型占一个字节)如果填充int型数组,除了0和-1,其他的不能...

    种花家的奋斗兔
  • 【PAT甲级】Spell It Right

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • JDK7并行计算框架介绍二 Fork/Join开发实例

    package forktest; import java.util.*; import java.util.concurrent.RecursiveActio...

    数据饕餮
  • 【LeetCode】146. LRU 缓存机制

    运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类:

    韩旭051
  • 五种I/O模型和Java NIO源码分析

      最近在学习Java网络编程和Netty相关的知识,了解到Netty是NIO模式的网络框架,但是提供了不同的Channel来支持不同模式的网络通信处理,包括同...

    黄泽杰
  • 五种I/O模型和Java NIO源码分析

      最近在学习Java网络编程和Netty相关的知识,了解到Netty是NIO模式的网络框架,但是提供了不同的Channel来支持不同模式的网络通信处理,包括同...

    程序员历小冰
  • 五种I/O模型和Java NIO源码分析

      最近在学习Java网络编程和Netty相关的知识,了解到Netty是NIO模式的网络框架,但是提供了不同的Channel来支持不同模式的网络通信处理,包括同...

    程序员历小冰
  • 一文让你彻底搞懂`__str__`和`__repr__`?

    我们都知道,Python的内置函数repr()能够把对象用字符串的形式表达出来,方便我们辨认。这就是“字符串表示形式”。repr()就是通过__repr__这个...

    宇宙之一粟

扫码关注云+社区

领取腾讯云代金券