求一个C语言问题的程序!

编写程序实现将键盘输入的一行字符按单词倒排输出。如键盘输入“Iloveyou”,屏幕显示“youloveI”。要求:(1)编写一个函数intinvertion(charc... 编写程序实现将键盘输入的一行字符按单词倒排输出。如键盘输入“I love you”,屏幕显示“you love I”。要求:
(1) 编写一个函数int invertion(char ch1[], char ch2[])实现按单词倒排字符串,第一个形参ch1接受实参传过来的原字符串,倒排后的新字符串通过第二个形参返回主函数,函数中还需要统计该字符串中共有多少个单词,函数最后返回字符串中包含的单词个数。
(2) 主函数中输入字符串,调用子函数invertion,输出倒排后的字符串及字符串中包含的单词个数。

请用C语言编写出这个程序~~十分感谢~~!
下面这个有好多错误耶,~不会改...
展开
 我来答
david_lu_st
2009-06-07 · TA获得超过234个赞
知道小有建树答主
回答量:194
采纳率:0%
帮助的人:153万
展开全部
#include <cstdio>

void input(char ch1[])
{
int i=1;
ch1[0] = ' ';
while( ( ch1[i]=getchar() ) != '\n' )
i++;
ch1[i++] = ' ';
ch1[i] = '\0';
}

int invertion(char ch1[], char ch2[])
{
int i, j=0, tmp, count=0;

for( i=0; ch1[i]; i++ ) ;
i-=2;
while( i>=0 )
{
while( ch1[i] != ' ' )
--i;
tmp = i+1;
while( ch1[tmp] != ' ' )
{
ch2[j]=ch1[tmp];
++tmp;
++j;
}
ch2[j] = ch1[tmp];
++j;
--i;
++count;
}

ch2[j] = '\0';

return count;
}

int main()
{
int word;
char ch1[1000], ch2[1000];

input(ch1);
word = invertion( ch1, ch2 );
printf("%s\n单词个数: %d\n",ch2,word);

return 0;
}
zy245433
2009-06-07 · 超过12用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:23.9万
展开全部
#include "stdio.h"
#include "string.h"
#include "ctype.h"
int invertion(char ch1[],char ch2[],int n)
\*原字符串由形参传给ch1,倒排后字符串(目前是空串)
传给ch2,字符串长度传给n*\
{int i,j=0,sum=1;
for(i=n-1;i>=0;)
ch2[j++]=ch1[i--];
\*原串从'\0'前最后一个字符开始*\
\*空串从第一个字符开始依次赋值*\
ch2[j]=0;
\*此时ch2[j]为最后一个字符的下一个字符,
赋结束标志*\
for(i=0;ch2[i];i+=1)
if(!(isspace(ch2[i]))&&isspace(ch2[i-1]))
\*如果当前字符不为空格等,而前一个字符是空格等,
单词个数加1,逻辑理解一下。*\
sum+=1;
return sum; \*返回单词个数*\
}
main()
{int n; \*该变量存放所输入字符的长度*\
char ch1[100],ch2[100];
\*两个数组分别存放输入的字符串及倒排后的字符串*\
gets(ch1);
n=strlen(ch1);
n=invertion(ch1,ch2,n);
\*调用题目要求函数,返回单词个数*\
printf("str1:%s\n",ch1);
printf("str2:%s\n",ch2);
printf("n=%d\n",n);
\*以上这几个输出语句安排在主函数和子函数里都一样,
这个就不需要多说了吧?*\
}

啊,看错了,是单词倒排不是整串倒排,你把
ch2串里单词分出来,子函数里再定义个字符数
组加个循环就行了。然后逐个倒排一下就行了,
我得作饭了,就这样吧,希望对你有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zy245434
2009-06-07
知道答主
回答量:2
采纳率:0%
帮助的人:3.4万
展开全部
#include "stdio.h"
#include "string.h"
#include "ctype.h"
int invertion(char ch1[],char ch2[],int n)
\*原字符串由形参传给ch1,倒排后字符串(目前是空串)
传给ch2,字符串长度传给n*\
{int i,j=0,k=0,sum=1;
char t[100][100]={0},tt;
for(i=n-1;i>=0;)
ch2[j++]=ch1[i--];
\*原串从'\0'前最后一个字符开始*\
\*空串从第一个字符开始依次赋值*\
ch2[j]=0;
\*此时ch2[j]为最后一个字符的下一个字符,
赋结束标志*\
for(i=0;ch2[i];i+=1)
if(!(isspace(ch2[i]))&&isspace(ch2[i-1]))
\*如果当前字符不为空格等,而前一个字符是空格等,
单词个数加1,逻辑理解一下。*\
sum+=1;

for(i=0;i<sum;)
for(j=0;;j+=1)
{t[i][j]=ch2[k++];
if(isspace(ch2[k]))
{i+=1;break;}
}
for(i=0;i<sum;i+=1)
{n=strlen(t[i]);
for(j=0;j<n/2;j+=1)
{tt=t[i][j];t[i][j]=t[i][n-j-1];t[i][n-j-1]=tt;}
}
k=0;
for(i=0;i<sum;i+=1)
{for(j=0;t[i][j];j+=1)
ch2[k++]=t[i][j];
if(i==0) ch2[k++]=' ';
}
ch2[k]=0;

return sum; \*返回单词个数*\
}
main()
{int n; \*该变量存放所输入字符的长度*\
char ch1[100],ch2[100];
\*两个数组分别存放输入的字符串及倒排后的字符串*\
gets(ch1);
n=strlen(ch1);
n=invertion(ch1,ch2,n);
\*调用题目要求函数,返回单词个数*\
printf("str1:%s\n",ch1);
printf("str2:%s\n",ch2);
printf("n=%d\n",n);
\*以上这几个输出语句安排在主函数和子函数里都一样,
这个就不需要多说了吧?*\
}

我是一楼的,呵呵修改次数太多了不让改了,刚才抽空把补充的给你写出来了,去试试吧。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w137397945
2009-06-07 · 超过14用户采纳过TA的回答
知道答主
回答量:48
采纳率:0%
帮助的人:53.9万
展开全部
已运行通过
#include<stdio.h>
int invertion (char ch1[], char ch2[])
{
int i, j = 0;
int flag = 0, word = 0;
for (i = 0; ch1[i] != '\0'; i++)
;
while (i > 0)
{
ch2[j++] = ch1[--i];
}
ch2[j] = '\0';
for (i = 0; ch1[i] != '\0'; i++)
{
if (flag == 0 && ch1[i] != ' ')
{
word++;
flag = 1;
}
if (ch1[i] == ' ')
{
flag = 0;
}
}
return word;
}
int main (void)
{
char ch1[20], ch2[20];
int word;
gets(ch1);
word = invertion (ch1, ch2);
printf ("\nThe sorted string is %s", ch2);
printf ("\nThere are %d words", word);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式