最近一直在做PTA的程序设计题,发现这些小程序还是蛮有意思的。关于单词的翻转:在英文句子中,翻转句子而英文单词的顺序不变,各单词以空字符隔开。
基本的思路是:首先翻转整个句子,然后翻转单词。
个人感觉这个方法理解不难(也是从别的大佬那借鉴的)[link]https://blog.csdn.net/yansj_scu/article/details/44599567.
还有更加简单的方法,还需要多多学习,嘻嘻!
话不多说,上代码。
/*
例如:I am a student.
*/
#include <stdio.h>
#include <string.h>
void TurnSentence(char *str, int start, int end);
void TurnWords(char *str, int n);
void Turn(char *str, int n);
void Turn(char *str, int n)
{
TurnSentence(str, 0, n-1);
//TurnWords(str, n);
}
void TurnSentence(char *str, int start, int end)//翻转整个句子,则为:tneduts a ma I
{
char temp;
while(start < end)
{
temp = str[start];
str[start++] = str[end];
str[end--] = temp;
}
}
void TurnWords(char *str, int n)//翻转每一个单词
{
int i = 0;
int j = 0;
int k = 0;
for (i = 0; i < n; i++)
{
if (str[i] != ' ')
{
j++;
}
else
{
TurnSentence(str, k, j - 1);
k = ++j;
}
if (i == n-1)//最后一个单词没有空字符所以要加上这一步,来翻转最后一个单词。
{
TurnSentence(str, k, j - 1);
}
}
}
int main(void)
{
char str[100];
int s;
gets(str);
s = strlen(str);
Turn(str, s);
puts(str);
return 0;
}