句子逆序C语言低端解法,易于理解。
1.收数据老生常谈。
2.将句子全部逆序。
3.将单词正序。
(这里有一个bug,最后一个词(原句子第一个词)总是收不到,所以写了个补丁。先记录空格的数量,当第二次读取的时候,读到最后一个空格的时候,直接跳进最后一个词,然后单独把最后一个词正序输出,此时用这个小功能内部的变量继承了主循环的变量,正序之后直接将输出第一个词。)
4.通过小功能内部的变量终值与字符串长度比较,以顺利跳出程序。
#include<stdio.h>
#include<string.h>
int len=0;
char stru[10000],in,asb[10000];
int i,j,k;
int pau,pau2;
char reg;
int flag,flag2;
int esnum;
int main()
{
//收入数据
while (1)
{
scanf("%c", &in);
// in = getchar();
if (in == '\n')
break;
stru[len++] = in;
}
//句子全部逆序
pau = len-1;
for(i=0;i<len/2;i++,pau--)
{
reg = stru[i];
stru[i] = stru[pau];
stru[pau] = reg;
//printf("%s",&stru[i]);
}
//统计空格数量
for(i=0;i<len;i++)
{
if(stru[i] == ' ')
esnum++;
}
//单词正序
i=0,j=0;
for(i=0;i<len;i++)
{
//最后一个空格之前的单词正序
if((stru[i] == ' '))
{
for(k=0;k<j/2;k++,pau--)
{
reg = asb[k];
asb[k] = asb[pau];
asb[pau] = reg;
}
for(k=0;k<j;k++)
{
printf("%c",asb[k]);
}
j=0;
printf(" ");
flag++;
// if(flag==esnum)
// continue;
}
else
{
asb[j]=stru[i];
j++;
pau=j-1;
}
if(flag==esnum)//空格数量比较,开启末尾单词正序小功能
{
flag2=i;
pau2=len-1;
for(k=flag2;k<(flag2+(len-flag2)/2);k++,pau2--)
{
reg = stru[k];
stru[k] = stru[pau2];
stru[pau2] = reg;
}
for(;flag2<len;flag2++)
{
printf("%c",stru[flag2]);
}
printf("\n");
break;
}
if(flag2==len-1)//小功能内部的变量终值与字符串长度比较
break;
}
return 0;
}
京公网安备 11010502036488号