| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1459 人关注过本帖
标题:按照相反的单词顺序显示词组
只看楼主 加入收藏
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
按照相反的单词顺序显示词组
程序代码:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 100
void fan(char *str)
{
    char word1[N],word2[N],space[N];
    int i,j,k,word=0,n;

    for(i=0,j=0,k=0,n=0;str[i]!='\0';i++)
    {
        if(isgraph(str[i]))                        //遇到字母时,把空格和单词互换
        {
            j++;
            if(k!=0)
            {
                strncpy(space,str+n-k,k);
                strcat(space,word1);
                strcpy(word1,space);
            }
            k=0;
        }
        else                                    //把单词2和“空格+单词1”互换
        {
            k++;
            if(j!=0)
            {
                strncpy(word2,str+n-j,j);
                strcat(word2,word1);
                strcpy(word1,word2);
            }
            j=0;
        }
        n++;
    }
    if(j!=0)
    {
        strncpy(word2,str+n-j-1,j);
        strcat(word2,word1);
        strcpy(word1,word2);
    }
    str=word1;
}

int main(void)
{
    char str[N]="see you later";

    fan(str);
    puts(str);
    return 0;
}
按照相反的单词顺序显示"see you later",结果为“later you see”,请问以上程序有什么错误?
搜索更多相关主题的帖子: 单词 color 
2013-05-17 11:46
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1510
专家分:9247
注 册:2010-3-16
收藏
得分:10 
大概写了下,代码有些丑陋。

程序代码:

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define N 100

int getword(char*  str,char* buf)
{    
    int i=0;
    while(isgraph(*str) && *str != '\0')
    {
        *buf++ = *str++;
        i++;
    }
    *buf='\0';
    return i;
}

int getspace(char*  str,char* buf)
{    
    int i=0;
    while(!isgraph(*str) && *str != '\0')
    {
        *buf++ = *str++;
        i++;
    }
    *buf='\0';
    return i;
}

char* fan(char* str)
{
    char newstr[N];
    char bufs[N][N];
    int i;
    int bufconst=0,wlen=0,slen=0;
    char *p = str;

    while(*p != '\0')
    {
        if(!isgraph(*p)|| *p != '\0')
        {
            slen=getspace(p,bufs[bufconst]);
            if(slen >0)bufconst++;
            p+=slen;
        }

        if(isgraph(*p) && *p != '\0')
        {
            wlen=getword(p,bufs[bufconst]);
            if(wlen >0)bufconst++;
                p+=wlen;
        }            
    }

    for(i=bufconst;i>=0;i--)
    {
        strcat(newstr,bufs[i]);
    }

    return newstr;
}

int main(void)
{
    char str[N]="see you later";
    puts(fan(str));    
    return 0;
}
2013-05-17 17:23
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
收藏
得分:0 
回复 2楼 apull
我运行了一下,还是得不到结果哦!还是显示
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-05-18 07:58
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
收藏
得分:0 
为什么我单步调试到
strncpy(space,str+n-k,k);
时,会出现
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-05-18 08:24
海上钢琴师
Rank: 2
等 级:论坛游民
帖 子:24
专家分:46
注 册:2013-4-18
收藏
得分:10 
回复 楼主 孤独城堡
我自己写了一个,蛮简单的.


#include<stdio.h>
#include<string.h>

int main(void)
{
    char str[1000],str1[1000];
    int i,j=0,k,len;

    gets(str);
    len=strlen(str)+1;
    str[len]=' ';

    for(i=len-1; i>=0; i--)
    {
        if(i==len-1) continue;                  
        if(str[i]!=' ')
        {
            str1[j++]=str[i];
        }
        if(i==0||str[i]==' ')                  
        {
            for(k=j-1; k>=0; k--)
                putchar(str1[k]);                  
            if(i==0) printf("%c",str[len-1]);  
            else     printf(" ");
            j=0;                                       
        }
    }
    return 0;
}

天行健!君子以自强不息;地势坤!君子以厚德载物。
2013-05-18 10:28
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:216
帖 子:1510
专家分:9247
注 册:2010-3-16
收藏
得分:0 
回复 3楼 孤独城堡
我测试都好着呢。我用的bcc
图片附件: 游客没有浏览图片的权限,请 登录注册
2013-05-18 18:17
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
收藏
得分:0 
回复 6楼 apull
我用的是vc++6.0,怎么我的结果不对呢!
2013-05-18 20:21
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
收藏
得分:0 
请问各位我的程序代码哪里错了?
2013-05-18 21:51
孤独城堡
Rank: 2
等 级:论坛游民
帖 子:55
专家分:14
注 册:2008-9-27
收藏
得分:0 
回复 5楼 海上钢琴师
请问
str[len]=' ';
有什么用的?我怎么觉得是多余的呢?
2013-05-20 11:44
海上钢琴师
Rank: 2
等 级:论坛游民
帖 子:24
专家分:46
注 册:2013-4-18
收藏
得分:0 
回复 9楼 孤独城堡
因为我用空格作为单词出现的标志,所以最后一个单词必须加一个空格。。。。额,难以表达,你手动运行感受一下。

天行健!君子以自强不息;地势坤!君子以厚德载物。
2013-05-22 12:30
快速回复:按照相反的单词顺序显示词组
数据加载中...
 
   



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

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