| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7790 人关注过本帖
标题:颠倒句子中的单词顺序。
只看楼主 加入收藏
百里
Rank: 2
等 级:论坛游民
帖 子:34
专家分:66
注 册:2016-10-1
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
颠倒句子中的单词顺序。
感觉有几个地方不对劲但是又不知道错在哪里?求大神指点!!!
这个程序的功能是输入:I love you!
输出:you love I!
就是将一句话的单词反过来输出,怎解???迷茫呀。
//////////////////////////////////////////
//////////////////////////////////////////
#include"stdio.h"
#define N 100
int Inverse(char str1[], char str2[][N]) ;

int main()
{
    char str1[N],
         str2[N][N],
          *pret=str2 ;
    int ret, i ;
    printf("Input a sentence:") ;
    gets(str1) ;
    ret=Inverse(str1, str2) ;
    for(i=0 ;i<ret-2 ;i++, pret++)
    {
        printf("%s ",*pret) ;
    }
    printf("%s%c\n", *pret, *(++pret)) ;
    return 0 ;
}
int Inverse(char str1[], char str2[][N])
{
    int i, count = 1,counter = 0, j, k ;
    for(i=0 ;str1[i]!='\0' ;i++, counter++)
    {
        if(str1[i]!=' ')
        {
            continue ;
        }
        else
        {
            count++ ;
        }
    }
    for(i=0, j=count-1, k=i ;i<counter ;i++, k++)
    {
        if(str1[i]!=' ')
        {
            str2[j][k] = str1[i] ;
        }
        else
        {
            j-- ;
            k= 0 ;
        }
    }
    k= 0 ;
    str2[count][k]= str1[counter] ;
    str2[count][k+1]= '\0' ;
    return count ;
}
搜索更多相关主题的帖子: include 单词 
2016-11-07 22:32
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
改得比较多,但功能尚在,只不过输出的第一个字符是个空格……其余的都按要求了
而且,用指针引用二维数组比较容易出错,main就不加指针了
程序代码:
#include<stdio.h>
#define N 100
int number(char str1[],char str2[][N]);
int main()
{
    char str1[N];
    char str2[N][N];
    int ret,i;
    gets(str1);
    ret=number(str1,str2);
    for (i=ret;i>=0;i--)
    {
        if (i==0)printf(" ");
        if (str1[0]!=' '||i!=0)printf("%s",str2[i]);
    }
    printf("\n");
    return 0;
}
int number(char str1 [],char str2[][N])
{
    int i,j,k;
    for (i=j=k=0;str1[i]!='\0';i++,k++)
    {
        if (str1[i]!=' ')
        {
            str2[j][k]=str1[i];
            str2[j][k+1]='\0';//这句很重要
        }
        else if (str1[i+1]!=' '&&str1[i+1]!='\0')//防止输入多个空格出错
        {
            j++;
            str2[j][0]=' ';
            k=0;
        }
    }
    return (j);
}


[此贴子已经被作者于2016-11-8 02:33编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-08 01:57
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
二维数组指针用法还是去看书比较好。




[此贴子已经被作者于2016-11-8 02:18编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-08 02:14
百里
Rank: 2
等 级:论坛游民
帖 子:34
专家分:66
注 册:2016-10-1
收藏
得分:0 
回复 2楼 九转星河
谢谢!!!
2016-11-08 08:58
百里
Rank: 2
等 级:论坛游民
帖 子:34
专家分:66
注 册:2016-10-1
收藏
得分:0 
////////////////////////////////////
感谢观看的各位,这道题基本上已经做出来了,可能还有一些地方可以优化的
。如果大家有好的方案的话可以分享一下哟。&。&
////////////////////////////////////
#include"stdio.h"
#include"ctype.h"
#define N 100
int Inverse(char str1[], char str2[][N]) ;
int main()
{
    char str1[N], str2[N][N];
    int ret, i ;
    printf("Input a sentence:") ;
    gets(str1) ;
    ret = Inverse(str1, str2) ;
    for(i=0 ;i<ret-1 ;i++)
    {
        printf("%s ", str2[i]) ;
    }
    printf("%s",str2[i]) ;
    printf("%c", str2[i+1][0]) ;
    return 0 ;
}
int Inverse(char str1[], char str2[][N])
{
    int i, count = 1, count_pha = 0, k, count_ret ;
    for(i=0 ;str1[i]!='\0' ;i++)
    {
        count_pha++ ;
        if(str1[i]!=' ')
        {
            continue ;
        }
        else
        {
            count++ ;
        }
    }
    count_ret = count ;
    str2[count][0] = str1[count_pha-1] ;//先赋值最后的标点符号。
    for(i=k=0,count-=1 ;str1[i]!='\0' ;i++)
    {
        if((str1[i]!=' '&&isalpha(str1[i]))||str1[i]=='\'')//isalpha()函数是判断字符是否为字母,是的话返回非零值。包含在头文件“ctype.h”中
        {
            str2[count][k] = str1[i] ;
            k++ ;
        }
        else
        {
            str2[count][k] = '\0' ;
            k=0 ;
            count-- ;

        }
    }
    return count_ret ;
}
2016-11-08 11:19
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<ctype.h>
#include<string.h>

void reverse(char *str);

int main()
{
    char s[100];
    fgets(s,100,stdin);
    reverse(s);
    return 0;
}

void reverse(char *str)
{
    int i=0,j=0;
    int len=strlen(str);
    int olen,nlen;
    len--;
    olen=len;
    while(ispunct(str[--len])) ;    /* 跳过末尾的符号 */
    nlen=len;
    while(len>=0) {
        if(isalnum(str[len])) {
            i++;    /* 计算字符数目,一个单词 */
        }
        else if(isspace(str[len])) {
            while(i) {
                putchar(str[len+(++j)]);
                i--;
            }
            j=0;
            putchar(' ');
        }
        else
            putchar(str[len]);
        if(len==0 && i)    /* 当前还有未打印的单词 */
            while(i) {
                putchar(str[len+j++]);
                i--;
            }
        len--;
    }
    for(i=0;i<olen-1-nlen;i++)    /* 打印末尾的符号 */
        putchar(str[nlen+1+i]);
    puts("");
}

未佩好剑,转身便已是江湖
2016-11-08 12:05
快速回复:颠倒句子中的单词顺序。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021939 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved