南开百题难题破解(2)
题目要求:
输入一个英文句子,翻转句子中的单词顺序。但单词内的顺序不变。句子中单词空格隔开。
为简单起见,标点符号和普通字母一样处理。
例如输入"I am a student.",则输出 student. a am I
题目解答:
[cpp]
void StrOL(void)
{
int i,j,len;
int start=0,end=0;
char buf;
for (i=0; i<maxline; i++)
{
len=strlen(xx[i]);
//该循环的作用是将行数据中的非字母数据置为空格字符,例如i am a student.运算后为i am a student t后含有空格
for (j=0; j<len; j++)
{
if (!isalpha(xx[i][j]) && xx[i][j]!=' ')
{
xx[i][j] = ' ';
}
}
strrev(xx[i]);//字符串倒置函数,将该行数据整体进行倒置,变为 tneduts a ma i
//该段程序的作用是将以空格分隔的小字符串进行倒置
for(j=0;j<len;j++)
{
if(isalpha(xx[i][j]))
{
start=j;//此时start指针指向t
while(isalpha(xx[i][j]))j++;
end=j-1;//此时end指针指向s
while(start<end)
{ www.zzzyk.com
buf=xx[i][start];
xx[i][start]=xx[i][end];
xx[i][end]=buf;
start++;
end--;
}
}
}
}
}
补充:软件开发 , C++ ,