鱼C论坛

 找回密码
 立即注册
查看: 972|回复: 3

[已解决]c 语言

[复制链接]
发表于 2022-3-17 22:36:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//用二维数组存放每个单词

#include <stdio.h>

#define MAX  80

int main(void)
{
        char str[MAX+1];
        char *p=str;
        int cot=0,i=0,j=0;
    char ch;
   
        fgets(str,MAX,stdin);
        while(*p++!='\n')
        {
                if(*p==' ')
                {
                        cot++;       
                }       
        }
        char word[cot][30];

        p=str;
        while((ch=*p++)!='\n')
        {
                if(ch!=' ')
                {
                        word[i][j++]=ch;
                }
                if(ch==' ')
                {
                        word[i][j]='\0';
                        i++;
                        j=0;
                }
        }
        word[i][j]='\0';
       
        for(cot;cot>=0;cot--)
        {
                printf("%s",word[cot]);
                if(cot>0)
                {
            printf(" ");
                }
        }

        return 0;
}

我的思路是先创建一个二维数组,存好每个单词,最后根据最后一个单词没有句号输出,但是结果说我的程序运行时出现错误(如数组越界等问题),这是哪里出现了问题呢,请教各位大佬!
最佳答案
2022-3-18 06:59:45
本帖最后由 jhq999 于 2022-3-18 07:40 编辑
#include <stdio.h>

#define MAX  80

int main(void)
{
        char str[MAX+1];
        char *p=str;
        int cot=0,i=0,j=0;
        char ch;
        
        fgets(str,MAX,stdin);
        while(*p++!='\n')
        {
                if(*p==' ')
                {
                        cot++;       
                }       
        }
                cot++;//最后一个没有空格
        char (*word)[30]=new char[cot][30];

        p=str;
        while((ch=*p++)!='\n')
        {
                if(ch!=' ')
                {
                        word[i][j++]=ch;
                }
                if(ch==' ')
                {
                        word[i][j]='\0';
                        i++;
                        j=0;
                }
        }
        word[i][j]='\0';
       
        for(cot;cot>0;cot--)///////////
        {
                printf("%s",word[cot-1]);
                if(cot>0)
                {
            printf(" ");
                }
        }

        return 0;
}
#include <stdio.h>

#define MAX  80

int main(void)
{
        char str[MAX+1];
        int cot=0,i=0,j=0;
        char ch;
        
        fgets(str,MAX,stdin);
        while(str[cot]!='\n')
        {
                        cot++;           
        }
        str[cot]='\0';
        for(cot;cot>0;cot--)
        {
                        if (str[cot]==0x20)
                        {
                                printf("%s",str+cot+1);
                                printf("%c",0x20);
                                str[cot]='\0';
                        }
        }
        printf("%s",str);
        return 0;
}
w eqrty u iop f gggh kl a
a kl gggh f iop u eqrty w

问题

问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-18 06:59:45 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jhq999 于 2022-3-18 07:40 编辑
#include <stdio.h>

#define MAX  80

int main(void)
{
        char str[MAX+1];
        char *p=str;
        int cot=0,i=0,j=0;
        char ch;
        
        fgets(str,MAX,stdin);
        while(*p++!='\n')
        {
                if(*p==' ')
                {
                        cot++;       
                }       
        }
                cot++;//最后一个没有空格
        char (*word)[30]=new char[cot][30];

        p=str;
        while((ch=*p++)!='\n')
        {
                if(ch!=' ')
                {
                        word[i][j++]=ch;
                }
                if(ch==' ')
                {
                        word[i][j]='\0';
                        i++;
                        j=0;
                }
        }
        word[i][j]='\0';
       
        for(cot;cot>0;cot--)///////////
        {
                printf("%s",word[cot-1]);
                if(cot>0)
                {
            printf(" ");
                }
        }

        return 0;
}
#include <stdio.h>

#define MAX  80

int main(void)
{
        char str[MAX+1];
        int cot=0,i=0,j=0;
        char ch;
        
        fgets(str,MAX,stdin);
        while(str[cot]!='\n')
        {
                        cot++;           
        }
        str[cot]='\0';
        for(cot;cot>0;cot--)
        {
                        if (str[cot]==0x20)
                        {
                                printf("%s",str+cot+1);
                                printf("%c",0x20);
                                str[cot]='\0';
                        }
        }
        printf("%s",str);
        return 0;
}
w eqrty u iop f gggh kl a
a kl gggh f iop u eqrty w
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-18 09:44:46 From FishC Mobile | 显示全部楼层
#include <stdio.h>

void foo(){
        char words[80];
        if(scanf("%s", words) == 1)
                ;
        else return;
        foo();
        printf("%s ", words);
}

int main(){
        foo();
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-18 12:08:41 | 显示全部楼层

用递归只能实现反着输出,但是最后还是会有空格
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 06:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表