有大佬能逐行解释一下代码吗?完全看不懂呜呜

⌬⌬⌬⌬⌬ 2020-12-27 04:43:51
// 从一个字符串中提取单词并输出,并输出最长的单词 #include<stdio.h> #include<string.h> void main() { char s[100],a[10][10],b[10]; int i,j,k,len,flag; gets(s); len=strlen(s); j=0;k=0;flag=0; for(i=0;i<len+1;i++) //注意i<len+1 if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') { a[k][j]=s[i]; j++; flag=1; } else if(flag==0) continue; else { a[k][j]='\0'; k++; j=0; flag=0; } for(i=0;i<k;i++) puts(a[i]); strcpy(b,a[0]);//求最长单词 for(i=1;i<k;i++) if(strlen(a[i])>strlen(b)) strcpy(b,a[i]); puts(b); }
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
⌬⌬⌬⌬⌬ 2020-12-29
  • 打赏
  • 举报
回复
引用 7 楼 qzjhjxj的回复:
a[i]表示二维数组每行首地址
嗯知道了谢谢!
qzjhjxj 2020-12-28
  • 打赏
  • 举报
回复
a[i]表示二维数组每行首地址
⌬⌬⌬⌬⌬ 2020-12-28
  • 打赏
  • 举报
回复
请问一下,针对这个代码,对于二维数组a[i][j],输出a[i]的意思就是输出这个二维数组的这一行吗?就是说二维数组可以写成一维数组??
⌬⌬⌬⌬⌬ 2020-12-28
  • 打赏
  • 举报
回复
非常感谢哦!
qzjhjxj 2020-12-27
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
int main(int argc, char* argv[])
{
    char s[100],a[10][10],b[10];
    int i,j,k,len,flag;

    gets(s);                //输入一字符串:good morning teacther
    len=strlen(s);          //取得字符串的长度值

    j=0;k=0;flag=0;         //初始化
    for(i=0;i<len+1;i++)   //注意i<len+1
       if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')//判断是否是字母,是就是单词,一个一个字符去判断
          {
            a[k][j]=s[i];        //把每个单词的每个字符记录到a[0][1]...a[0][10],一个单词一行.
            j++;                 //good     a[0][0-10]
            flag=1;              //morning  a[1][0-10]
          }                      //teacther a[2][0-10]
       else if(flag==0) //如果不是字母,判断是否是单词的头部
                  continue;
            else            //否则就是尾部
                {
                   a[k][j]='\0'; //每个单词的结束符
                   k++;          //进入下一个单词准备
                   j=0;          //a[k][0]
                   flag=0;       //标志复位
                }
    /*上面这段代码执行完,数组a中的结果:a[10][10]={"good\0",
                                                    "morning\0",
                                                    "teacther\0"
                                                                }
    */

    for(i=0;i<k;i++) //输出字符串中的单词,一个单词一行
        puts(a[i]);  //a[0][0]..... good
                     //a[1][0]      morning
                     //a[2][0]      teacther

    strcpy(b,a[0]); //把a[0]数组中第一个单词拷贝到数组b中,作为比较单词长度的初始值
    for(i=1;i<k;i++)
        if(strlen(a[i])>strlen(b))//与数组a中其他单词比较长度
           strcpy(b,a[i]); // 找到最长单词,放入b数组中

    puts(b); //输出最长的单词   teacther

    return 0;
}
forever74 2020-12-27
  • 打赏
  • 举报
回复
你知道这是什么语言,你知道啥是头文件,你知道哪个是主函数,你知道哪个是数组,甚至你都知道数组有多大。 瞧,你不是“完全”看不懂,你已经懂好多了。 说谎的不是好孩纸。 所以, 要么你说清楚具体哪里不懂; 要么你回去看那些能看懂的,然后合起书,靠自己把那些看懂了的用自己的方式写出来,调试运行到满意。然后再回来看这个。
Isnis-fallen 2020-12-27
  • 打赏
  • 举报
回复
不是引文字母, 是英文字母
Isnis-fallen 2020-12-27
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<string.h>
void main()
{
char s[100],a[10][10],b[10];
int i,j,k,len,flag;
gets(s);//输入字符串
len=strlen(s); //取字符串长度
j=0;k=0;flag=0;
for(i=0;i<len+1;i++)   //逐个字符处理输入字符串
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') //凡是引文字母,即认为此字符为单词一部分
{
a[k][j]=s[i];   //单词的字符逐个存入二维数组a, 一共10个单词,每单词长不超过10个字符, 所以a[10][10]
j++;
flag=1;    //不是单词结尾
}
else if(flag==0) //继续取下一个单词
continue;
else  //一个单词结束保存
{
a[k][j]='\0'; 
k++;
j=0;
flag=0; 

}
for(i=0;i<k;i++)
puts(a[i]);   //输出得到的每个单词

strcpy(b,a[0]);//求最长单词
for(i=1;i<k;i++) //遍历每个单词
if(strlen(a[i])>strlen(b))  //每个单词和b里保存单词比较长度
strcpy(b,a[i]); //如果比b里单词长, 取代b里单词
puts(b);  //输出最长单词
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧