69,336
社区成员
发帖
与我相关
我的任务
分享
题目:编写一个程序,按照相反的单词顺序显示命令行参数。
如命令行参数是“see you later”,程序的显示为“later you see”.
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<conio.h>
#define MAX 100
void reverse(char*);
int main(void){
char str[MAX];
puts("please enter a string,i will reverse it.");
while(gets(str)!=NULL){
reverse(str);
puts("try again!");
}
puts("bey");
getch();
return 0;
}
void reverse(char*str){
char *p;
char temp;
int i,n,wl;
p=str;
for(i=0,n=strlen(str);i<n/2;i++){/*倒置字符串*/
temp=*(p+i);
*(p+i)=*(p+n-1-i);
*(p+n-1-i)=temp;
}
puts(str);
p=str;//看答案的,前面已有这句了,为什么这里还要来这个?
wl=0;
do{ /*倒置字符串中单词的字符*/
if(isalpha(*p))
wl++;
else{
if(wl>1){
for(i=0;i<wl/2;i++){
temp=*(p-wl+i);
*(p-wl+i)=*(p-i-1);
*(p-i-1)=temp;
}
wl=0;
}
}
}while(*p++!='\0');
puts(str);//我把这句换成puts(p)为什么不行呢?
}
//处理出来的输出单词函数
void put(char *arr,int l,int r)
{
for (int idx = l; idx <= r; idx++)
{
printf_s("%c",arr[idx]);
}
}
void main()
{
printf("input a str:");
char buff[MAX];
int idx = 0;
int charNum = 0;
int lef,rig;
//输入一行字符串
char temp;
for (idx = 0; ;idx++)
{
temp = getchar();
if (temp == '\n')
break;
buff[idx] = temp;
}
buff[idx] = '\0';
charNum = idx;
idx--;
//输出
lef = rig = idx;
for (; idx >= 0; idx--)
{
if (buff[idx] == ' ')
{
put(buff,idx+1,lef);
printf_s(" ");
lef = rig = idx - 1;
}
}
//最后一个单词的特殊处理
put(buff,0,rig);
}
VS2010上试验过了。
思路是从后向前扫描字符串发现一个空格就把lef锁定到单词的左位置,rig锁定到单词的右位置,然后输出。
最后一个单词要单独处理了