大佬,麻烦帮忙看下
#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 10:20 编辑
楼主能不能说说这个代码是干啥用。。不说没法改
本帖最后由 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> rt3 发表于 2021-11-27 09:53
楼主能不能说说这个代码是干啥用。。不说没法改
一楼前面的代码是我写的,目标是找出一个字符串中最长的单词。 #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");
}
#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;
}
rt3 发表于 2021-11-27 10:59
代码的意思,我懂。
就是不知道怎么该
还是感谢大佬 basketmn 发表于 2021-11-27 12:16
代码的意思,我懂。
就是不知道怎么该
还是感谢大佬
你那个代码的思路我捋不顺,只能重写了 rt3 发表于 2021-11-27 12:20
你那个代码的思路我捋不顺,只能重写了
谢谢大佬!
因为只能给一个最佳,jaxkz007先,所以不好意思!
还是谢谢你!
我再想想吧!
页:
[1]