versión mejorada irónica
Dada una palabra de Inglés, que le pedirá que escriba un programa, todas las palabras de la orden de la frase invierten salida.
Formatos de entrada:
Entrada de prueba comprende un caso de prueba, dada la longitud de la cadena no exceda un total de 500.000 en una fila. Cadena compuesta de varias palabras y un número de espacios, donde la palabra es letras inglesas (caso es el caso) que consiste en una cadena, un número entre palabras separadas por espacios.
Los formatos de salida:
Cada salida de caso de prueba por línea, sentencia de salida después de la marcha atrás, y asegurarse de que sólo un espacio entre palabras.
Escribir tema y las ideas: En el principio que quería escribir una matriz de dos dimensiones, los resultados medio no salir;
solamente luchado otras ideas piensan que debe ser sustituido por un puntero a la matriz, y luego fue dejado fuera (un poco de vergüenza), y finalmente de ninguna manera, sólo se puede encontrar un poco de código, aprender sobre el hermano mayor.
Decidí mirar a entender el código, vuelvo a pensar acerca de sus propias ideas, trato de usar sus propias ideas para escribir de nuevo.
Código es el siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char str[500010];
int len,real,head,count=0;
int i,j,k;
gets(str); //gets只有遇到回车才停止输入;
len=strlen(str); //len用来存储字符串长度;
for(i=len-1;i>=0;i--) //从后往前进行
{
if(str[i]!=' ')
{
real=i; //记录单词最后一个字母的位置
for(j=i-1;j>=0;j--)
{
if(str[j]==' ') //向前遍历,遇到空格停下来
{
break;
}
}
head=j+1; //指向空格的下一个空间,即单词的第一个字母
if(count>0) //如果不是输出第一个单词,即原字符串最后一个单词,要输出一个相隔的空格
{
printf(" ");
}
for(k=head; k<=real; k++)//从该单词的开头字符逐个输出到末尾字符
{
printf("%c", str[k]);
}
count++;
i=j; //从遇到的空格那个位置开始,继续向前查询
}
}
return 0;
}