[C ++] - dos maneras para voltear la cadena

título Descripción

Las palabras se invirtieron frase, puntuacion no está al revés. . Por ejemplo, yo como Beijing después de que la función se convierte en :. Beijing como yo

Introduzca una descripción:

Cada prueba comprende una entrada de prueba :. I como modo de realización Beijing la longitud de entrada que no exceda de 100

Descripción Salida:

Después de cadena de salida secuencialmente invertida, separados por espacios

Ejemplo 1

Entrada:. I como Beijing
Salida: Beijing como I.

Pensando 1 : substr por la primera cadena en una palabra en un vector, el vector y luego en palabras de salida orden inverso, para completar la cadena invertida
códigos:

#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;
int main()
{
	
	while (1)
	{
		string str;
		getline(cin, str);
		vector<string> v;
		int pos = 0, start = 0;
		while(pos<str.size())
		{
			pos = str.find(' ', start);
			string ret = str.substr(start, pos - start);
			v.push_back(ret);
			start = pos + 1;
		}
		
		vector<string>::reverse_iterator it = v.rbegin();
		while (it != v.rend())
		{
			cout << *it << " ";
			it++;
		}
		cout << endl;
	}
	system("pause");
	return 0;
}

2 Ideas : primera vuelta completa una cadena entera, y luego completar la reversión parcial, que es detener después de encontrar el espacio, flip completa.
código:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
	string s;
	 注意这里要使用getline,cin>>s遇到空格就接收结束了
	getline(cin, s);
	 翻转整个句子 
	reverse(s.begin(), s.end()); // 翻转单词
	auto start = s.begin();
	while (start != s.end())
	{
		auto end = start;
		while (end != s.end() && *end != ' ')
			end++;
		reverse(start, end);
		if (end != s.end())
			start = end + 1;
		else
			start = end;
	}
	cout << s << endl;
	system("pause");
	return 0;
}
Publicado 33 artículos originales · alabanza ganado 13 · vistas 1046

Supongo que te gusta

Origin blog.csdn.net/Vicky_Cr/article/details/104852198
Recomendado
Clasificación