basketmn 发表于 2021-11-27 09:08:07

大佬,麻烦帮忙看下

#include <stdio.h>

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

int main(void)
{
      char s                                                                                       ;
      int d , i , j , k                                                                         ;
      gets(s)                                                                                          ;
      for(k = i= 0 ; s ; k ++) {
            i=j;
                        for(;s;i++)
                                if((s<'a'&&s>'Z')||s<'A'||s>'z');
                        for(j=i;s;j++)
                                if((s >= 'A' && s <= 'Z') || (s >= 'a' && s <= 'z'))   ;
                        d=i;
                        d=j-i;                                 
      }
      for(j = 0 , i = 1 ; i < k ; i ++) if(d > d) j = i                                    ;
      for(i = 0 ; i < d ; i ++) putchar(s + i])                                          ;
      printf("\n")                                                                                       ;
}
为什么没有输出呢?帮我解释下,最好在我出问题的地方注释下。
谢谢!

rt3 发表于 2021-11-27 09:53:29

本帖最后由 rt3 于 2021-11-27 10:20 编辑

楼主能不能说说这个代码是干啥用。。不说没法改

jackz007 发表于 2021-11-27 10:31:38

本帖最后由 jackz007 于 2021-11-27 10:49 编辑

#include <stdio.h>

int main(void)
{
      char s                                                                                       ;
      int d , i , j , k , m                                                                     ;
      gets(s)                                                                                          ;
      for(k = i = 0 ; s ; k ++ , i = j) {
                for(; s ; i ++) if ((s >= 'A' && s <= 'Z') || (s >= 'a' && s <= 'z')) break ; // if 的目标是跳出循环,否则,根本就没必要写
                for(j = i ; s ; j ++) if (s < 'A' || (s > 'Z' && s < 'a') || s > 'z') break ; // if 的目标是跳出循环,否则,根本就没必要写
                d = i                                                                              ;
                d = j - i                                                                            ;
      }
      for(m = d , i = 1 ; i < k ; i ++) if(d > m) m = d                              ;
      for(i = 0 ; i < k ; i ++) {
                if(d == m) {
                        for(j = 0 ; j < d ; j ++) putchar(s + 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>

jackz007 发表于 2021-11-27 10:45:27

rt3 发表于 2021-11-27 09:53
楼主能不能说说这个代码是干啥用。。不说没法改

      一楼前面的代码是我写的,目标是找出一个字符串中最长的单词。

rt3 发表于 2021-11-27 10:59:37

#include<stdio.h>

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

rt3 发表于 2021-11-27 12:14:58

#include <stdio.h>
#include <ctype.h>

int main(void){
        char s;//创建 字符数组 s
        for(int i=0;0<4100;i++){
                s=getchar();//给 字符串 s 赋值,输入 '!' 结束赋值
                if('!'==s){
                        s='\0';
                        break;
                }
        }
        int max=0,l=0;
        for(int i=0;'\0'!=s;i++){
                for(l=0;0!=isalpha(s);i++,l++)putchar(s);
                printf(",%d\n",l);
                if(max<l)max=l;
        }
                printf("max==%d\n",max);
        return 0;
}

basketmn 发表于 2021-11-27 12:16:44

rt3 发表于 2021-11-27 10:59


代码的意思,我懂。
就是不知道怎么该
还是感谢大佬

rt3 发表于 2021-11-27 12:20:44

basketmn 发表于 2021-11-27 12:16
代码的意思,我懂。
就是不知道怎么该
还是感谢大佬

你那个代码的思路我捋不顺,只能重写了

basketmn 发表于 2021-11-27 12:24:04

rt3 发表于 2021-11-27 12:20
你那个代码的思路我捋不顺,只能重写了

谢谢大佬!
因为只能给一个最佳,jaxkz007先,所以不好意思!
还是谢谢你!
我再想想吧!
页: [1]
查看完整版本: 大佬,麻烦帮忙看下