A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© rocki 中级黑马   /  2014-7-14 16:57  /  2836 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 rocki 于 2014-7-14 21:42 编辑
  1. #include <stdio.h>

  2. int main(int argc, const char * argv[])
  3. {
  4.     int i,len=0,maxlen=0;
  5.    
  6.     char *p,*pt,s[1000],subs[100];

  7.     printf("请输入单词空格分开:\n");
  8.    
  9.     gets(s);
  10.     //scanf("%s",s);
  11.    
  12.     for (pt=s; *pt!='\0'; pt++)
  13.     {
  14.         if(*pt!=' ')
  15.         {
  16.             len++;
  17.         }
  18.         else
  19.         {
  20.             if (len>maxlen)
  21.             {
  22.                 maxlen=len;
  23.                 p=pt-len;
  24.                 len=0;
  25.             }
  26.         }
  27.     }
  28.     for(i = 0;i < maxlen;i++)
  29.     {
  30.         subs[i] = *(p + i);
  31.     }
  32.         
  33.     subs[maxlen] = '\0';
  34.         
  35.     printf("最长的英文词是:%s,其长度是:%d个字符。\n",subs,maxlen);
  36.    
  37.     return 0;
  38. }
复制代码
这个程序X-code给了两个警告, 一个是因为gets函数,但是我用scanf替换gets 后,程序执行结果都成空得了。求解
第二个警告是下面for循环那里。变量P在哪里用数据可能不定,x-code给的解决办法是初始化p。可是这个P在上面步骤中我让他不断指向最长的字符串了。
求解。

还有这个基础测试,,,我如果交上去有两个警告是不是要扣分的呢?

本帖被以下淘专辑推荐:

7 个回复

倒序浏览
- -大家不要忙着水贴么。。。看看我这个怎么解决。搞了好长时间了。
回复 使用道具 举报
你这个是不是混了 这个是C语言  你要调用OC的getter方法就必须有啊  你又每有定义类和方法 也没有生成getter  就算是C你也没有定义get函数啊  肯定是错的  而且 就算是有也应该调用set方法啊
回复 使用道具 举报
  1.       #include <stdio.h>
  2. #include<string.h>
  3. main()
  4. {
  5.     int  i;
  6.     int  j=0;
  7.     int  k=0;
  8.     int  l=0;
  9.     char words[] = " i  am  from  china  beijing";
  10.     for(i=0;i<strlen(words);i++)
  11.     { if ( words[i]!=' ')
  12.       { j++  ;
  13.         if (k<j)
  14.             k=j  ,l=i;
  15.       }
  16.     else
  17.         j=0;
  18.     }
  19.    
  20.     printf("最长字符串是\n");
  21.     for (i=l-k+1;i<=l;i++)
  22.     {printf("%c",words[i]);}
  23.             return 0;
  24. }

  25. 6、 计算1~100中所有7的倍数的个数(C语言编程题)
  26.   
  27. #include<stdio.h>
  28. int main()
  29. {int i ;
  30.     int j=0;
  31.     for(i=1;i<=100;i++)
  32.     {if(i%7==0)
  33.         j++;
  34.     }
  35.     printf("%d\n",j);
  36.     return 0;
  37. }
复制代码
回复 使用道具 举报
这个是我的程序代码你  应该可以  题目上要求是已知的字符串
回复 使用道具 举报
云霄之上 发表于 2014-7-14 18:19
你这个是不是混了 这个是C语言  你要调用OC的getter方法就必须有啊  你又每有定义类和方法 也没有生成gette ...

看清楚我用的时gets()
回复 使用道具 举报
rocki 中级黑马 2014-7-14 19:05:20
7#
云霄之上 发表于 2014-7-14 18:24
这个是我的程序代码你  应该可以  题目上要求是已知的字符串

我的题目是要求用户输入的。我写的那个程序本身没有错得。只是给了我两个警告。不影响运行的。只是在某些情况下程序会出问题。
回复 使用道具 举报
你的思路不错,不过有个小问题。
你是以空格作为每个单词的标志,最后一点单词后面没有空格,你的程序就不会统计到最后一个字符串,你可以把最长单词放在字符串最后面试试看。
我的实现方法给你参考一下:
  1. #include <stdio.h>
  2. #include <string.h>

  3. // 定义主函数,作为程序的入口
  4. int main()
  5. {
  6.     // 定义一个字符数组a,并初始化为已知的字符串
  7.     char a[] = "ab abc abcd ac abcdefg ae";
  8.    
  9.     // 定义一个字符串数组b,用来存放已知字符串所包含的单词
  10.     char *b[10];
  11.    
  12.     // 将第一个单词赋值给b[0]
  13.     b[0] = a;
  14.    
  15.     // 定义一个整型变量length,用来存放已知字符串的长度
  16.     int length = sizeof(a)-1;
  17.    
  18.     // 定义i用来做数组a的下标和for循环的条件参数;定义j用来做数组b的下标;定义flag用来记录当前空格处i的值
  19.     int i,j,flag = 0;
  20.     j = 1;
  21.    
  22.     // 定义for循环,当i小于字符串长度时,执行循环体,i++
  23.     for (i = 0; i<length; i++)
  24.     {
  25.         // 判断当前字符是否为空格
  26.         if (a[i] == ' ')
  27.         {
  28.             // 如果为空格,则将该元素赋值为字符串结束符'\0',作为上个单词的结束标志
  29.             a[i] = '\0';
  30.             
  31.             // 将当前的i值赋值给flag
  32.             flag = i;
  33.             
  34.             // 将数组a中当前空格后的所有字符作为一个单词,赋值给b[j]
  35.             b[j] = &a[flag+1];
  36.             
  37.             // j++,进入下次循环给字符串数组b下一个元素赋值
  38.             j++;
  39.         }
  40.     }
  41.    
  42.     // 定义一个数组B用来存放字符串数组b中每个单词的长度
  43.     unsigned long B[10];
  44.    
  45.     // 定义num用来统计单词的个数
  46.     int num =0;
  47.    
  48.     /******用for循环将每个单词的长度存入数组B*****/
  49.     for (i = 0; i<j; i++)
  50.     {
  51.         // 求出相应单词长度,赋值给数组B的相应元素
  52.         B[i] = strlen(b[i]);
  53.         num++;
  54.     }
  55.    
  56.     // 定义max存放最长字符串的长度
  57.     unsigned long max = 0;
  58.    
  59.     // 定义temp标记最长字符串在数组b中的下标
  60.     int temp;
  61.    
  62.     /************用for循环求出最长的字符串的下标和长度************/
  63.     for (i = 0; i<num; i++)
  64.     {
  65.         // 判断当前字符串长度与下个字符串长度大小
  66.         if (max<B[i])
  67.         {
  68.             // 如果当前字符串长度比下个字符串长度小,则将下个字符串长度赋值给max
  69.             max = B[i];
  70.             
  71.             // 标记最长字符串的下标
  72.             temp = i;
  73.         }
  74.     }
  75.    
  76.     // 打印输出结果
  77.     printf("一共有%d个单词,最长的单词是第%d个:%s\n",num,temp+1,b[temp]);
  78.    
  79.     return 0;
  80. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马