鱼C论坛

 找回密码
 立即注册
查看: 646|回复: 8

[已解决]大佬,麻烦帮忙看下

[复制链接]
发表于 2021-11-27 09:08:07 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main(void)
{
        char s[4100]                                                                                       ;
        int d[2000][2] , i , j , k                                                                         ;
        gets(s)                                                                                            ;
        for(k = i = 0 ; s[i] ; i=j,k ++) {
                for(; s[i] && (s[i] < 'A' || (s[i] > 'Z' && s[i] < 'a') || s[i] > 'z') ; i ++)             ;
                for(j = i ; s[j] && ((s[j] >= 'A' && s[j] <= 'Z') || (s[j] >= 'a' && s[j] <= 'z')) ; j ++) ;
                d[k][0] = i                                                                                ;
                d[k][1] = j - i+1                                                                           ;
        }
        for(j = 0 , i = 1 ; i < k ; i ++) if(d[i][1] > d[j][1]) j = i                                      ;
        for(i = 0 ; i < d[j][1] ; i ++) putchar(s[d[j][0] + i])                                            ;
        printf("\n")                                                                                       ;
}
我下面这个是按照上面这个修改的,
#include <stdio.h>

int main(void)
{
        char s[4100]                                                                                       ;
        int d[2000][2] , i , j , k                                                                         ;
        gets(s)                                                                                            ;
        for(k = i= 0 ; s[i] ; k ++) {
            i=j;
                        for(;s[i];i++)
                                if((s[i]<'a'&&s[i]>'Z')||s[i]<'A'||s[i]>'z');
                        for(j=i;s[j];j++)
                                if((s[j] >= 'A' && s[j] <= 'Z') || (s[j] >= 'a' && s[j] <= 'z'))   ;
                        d[k][0]=i;
                        d[k][1]=j-i;                                 
        }
        for(j = 0 , i = 1 ; i < k ; i ++) if(d[i][1] > d[j][1]) j = i                                      ;
        for(i = 0 ; i < d[j][1] ; i ++) putchar(s[d[j][0] + i])                                            ;
        printf("\n")                                                                                       ;
}
为什么没有输出呢?帮我解释下,最好在我出问题的地方注释下。
谢谢!
最佳答案
2021-11-27 10:31:38
本帖最后由 jackz007 于 2021-11-27 10:49 编辑
#include <stdio.h>

int main(void)
{
        char s[4100]                                                                                       ;
        int d[2000][2] , i , j , k , m                                                                     ;
        gets(s)                                                                                            ;
        for(k = i = 0 ; s[i] ; k ++ , i = j) {
                for(; s[i] ; i ++) if ((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z')) break ; // if 的目标是跳出循环,否则,根本就没必要写
                for(j = i ; s[j] ; j ++) if (s[j] < 'A' || (s[j] > 'Z' && s[j] < 'a') || s[j] > 'z') break ; // if 的目标是跳出循环,否则,根本就没必要写
                d[k][0] = i                                                                                ;
                d[k][1] = j - i                                                                            ;
        }
        for(m = d[0][1] , i = 1 ; i < k ; i ++) if(d[i][1] > m) m = d[i][1]                                ;
        for(i = 0 ; i < k ; i ++) {
                if(d[i][1] == m) { 
                        for(j = 0 ; j < d[i][1] ; j ++) putchar(s[d[i][0] + j])                            ;
                        putchar('\n')                                                                      ;
                }
        }
}
        编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
A AA BBB CCCC DDDD eeee FFff GgGg hHh III JJ K
CCCC
DDDD
eeee
FFff
GgGg

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-27 09:53:29 | 显示全部楼层
本帖最后由 rt3 于 2021-11-27 10:20 编辑

楼主能不能说说这个代码是干啥用。。不说没法改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-27 10:31:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-11-27 10:49 编辑
#include <stdio.h>

int main(void)
{
        char s[4100]                                                                                       ;
        int d[2000][2] , i , j , k , m                                                                     ;
        gets(s)                                                                                            ;
        for(k = i = 0 ; s[i] ; k ++ , i = j) {
                for(; s[i] ; i ++) if ((s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z')) break ; // if 的目标是跳出循环,否则,根本就没必要写
                for(j = i ; s[j] ; j ++) if (s[j] < 'A' || (s[j] > 'Z' && s[j] < 'a') || s[j] > 'z') break ; // if 的目标是跳出循环,否则,根本就没必要写
                d[k][0] = i                                                                                ;
                d[k][1] = j - i                                                                            ;
        }
        for(m = d[0][1] , i = 1 ; i < k ; i ++) if(d[i][1] > m) m = d[i][1]                                ;
        for(i = 0 ; i < k ; i ++) {
                if(d[i][1] == m) { 
                        for(j = 0 ; j < d[i][1] ; j ++) putchar(s[d[i][0] + j])                            ;
                        putchar('\n')                                                                      ;
                }
        }
}
        编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
A AA BBB CCCC DDDD eeee FFff GgGg hHh III JJ K
CCCC
DDDD
eeee
FFff
GgGg

D:\00.Excise\C>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-27 10:45:27 | 显示全部楼层
rt3 发表于 2021-11-27 09:53
楼主能不能说说这个代码是干啥用。。不说没法改


        一楼前面的代码是我写的,目标是找出一个字符串中最长的单词。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-27 10:59:37 | 显示全部楼层
#include<stdio.h>

int main(void){
        char s[4100];//创建 字符数组 s
        int d[2000][2],i,j,k;//创建 二维int数组d,int 变量 i,j,k
        gets(s);//给 s 赋值
        for(k=i=0;s[i];k++){//循环 1
                i=j;
                for(;s[i];i++)if((s[i]<'a'&&s[i]>'Z')||s[i]<'A'||s[i]>'z');//循环 2,此语句执行后,i 为 用户输入的 字符的数量-1.原代码后面的 if 语句 即没有输出判断结果,也没有其他操作,无意义
                for(j=i;s[j];j++)if((s[j] >= 'A' && s[j] <= 'Z') || (s[j] >= 'a' && s[j] <= 'z'));//循环 3,循环 2 结束后 s[i] == false ,j==i,因此 s[j] == false,该循环仅执行头部的初始化语句 j=i
                d[k][0]=i;//d[0][0]==i
                d[k][1]=j-i;//d[0][1]==j-i==0
        }//循环 1 和 循环 2 的 退出条件 相同,且 s[i]在 循环2 后 没有 变动,因此 循环 1只迭代 1次,循环1 结束后 k==1
        for(j=0,i=1;i<k;i++)if(d[i][1]>d[j][1])j=i;//循环 4.i==1,k==1,循环 4条件 不成立,该循环 仅执行头部的初始化语句 j=0
        for(i=0;i<d[j][1];i++)putchar(s[d[j][0]+i]);//循环 5,i==0,d[j][1]==d[0][1]==0,循环 5条件 不成立,该循环 仅执行头部的初始化语句 i=0
        printf("\n");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-27 12:14:58 | 显示全部楼层
#include <stdio.h>
#include <ctype.h>

int main(void){
        char s[4100];//创建 字符数组 s
        for(int i=0;0<4100;i++){
                s[i]=getchar();//给 字符串 s 赋值,输入 '!' 结束赋值
                if('!'==s[i]){
                        s[i]='\0';
                        break;
                }
        }
        int max=0,l=0;
        for(int i=0;'\0'!=s[i];i++){
                for(l=0;0!=isalpha(s[i]);i++,l++)putchar(s[i]);
                printf(",%d\n",l);
                if(max<l)max=l;
        }
                printf("max==%d\n",max);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-27 12:16:44 | 显示全部楼层


代码的意思,我懂。
就是不知道怎么该
还是感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-27 12:20:44 | 显示全部楼层
basketmn 发表于 2021-11-27 12:16
代码的意思,我懂。
就是不知道怎么该
还是感谢大佬

你那个代码的思路我捋不顺,只能重写了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-27 12:24:04 | 显示全部楼层
rt3 发表于 2021-11-27 12:20
你那个代码的思路我捋不顺,只能重写了

谢谢大佬!
因为只能给一个最佳,jaxkz007先,所以不好意思!
还是谢谢你!
我再想想吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 03:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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