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

2024-11-15 17:59:49
推荐回答(4个)
回答1:

#include

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;
}

回答2:

#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串里单词分出来,子函数里再定义个字符数
组加个循环就行了。然后逐个倒排一下就行了,
我得作饭了,就这样吧,希望对你有帮助。

回答3:

#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 for(j=0;;j+=1)
{t[i][j]=ch2[k++];
if(isspace(ch2[k]))
{i+=1;break;}
}
for(i=0;i {n=strlen(t[i]);
for(j=0;j {tt=t[i][j];t[i][j]=t[i][n-j-1];t[i][n-j-1]=tt;}
}
k=0;
for(i=0;i {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);
\*以上这几个输出语句安排在主函数和子函数里都一样,
这个就不需要多说了吧?*\
}

我是一楼的,呵呵修改次数太多了不让改了,刚才抽空把补充的给你写出来了,去试试吧。

回答4:

已运行通过
#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;
}