黑马程序员技术交流社区

标题: 我想问问我哪里写错了谁帮我优化下 [打印本页]

作者: ★彬★卍囧神    时间: 2014-5-15 15:39
标题: 我想问问我哪里写错了谁帮我优化下
本帖最后由 傘が咲く 于 2014-5-21 23:42 编辑
  1. //  7、 编写一个int string_len(char *s),返回字符串s的字符长度(不包括\0)  (C语言编程题)
  2. #include <stdio.h>
  3. int string_len(char *s);
  4. int main()
  5. {        while(1){
  6.         printf("请输入一串字符串?我将返回它的长度:\n");
  7.         char s[100];                                                                                                //定义一个字符串数组
  8.         gets(s);                                                                                                        //调用gets()函数主要用来从键盘输入字符串
  9.         printf("字符串长度为:%d\n", string_len(s));                        //调用string_len(s)函数,并打印出返回值
  10.         }
  11.         return 0;
  12. }
  13. int string_len(char *s)                                                                                //定义测字符串长度函数                                                                                
  14. {        int n=0;
  15.         while(*s != '\0')                                                                                        //判断是否为'\0'                                                                                                                                                                                                        
  16.         {        n++;*s++;}                                                                                                //是记数n加一,再移动到下一个字符再进行判断
  17.         return n;
  18. }
复制代码
我想问问/0问什么没用啊
作者: 兰闻天    时间: 2014-5-15 15:42
20个没有错,/0是两个字符,你应该是想打'\0'
作者: ★彬★卍囧神    时间: 2014-5-15 15:48
兰闻天 发表于 2014-5-15 15:42
20个没有错,/0是两个字符,你应该是想打'\0'

我打\0也是一样的
作者: Sniper_YJ    时间: 2014-5-15 15:55
首先需要告诉你的是'\0'不是手动输入的,而是字符串数组自动生成的,我们通过键盘是不可以直接输入'\0'的,他的'\0'是在你输入\0或者/0后自动追加的'\0',所以你不用纠结这个问题。附上我自己的代码
  1. #include<stdio.h>
  2. #define MAX 100
  3. char s[MAX];
  4. int string_len(char *s)
  5. {
  6.     int n=0;//定义变量n用来储存字符串数组a的长度
  7.     for(int i=0;i<100;i++)//通过循环数组s的长度次数来对a[i]与\0进行比较
  8.     {
  9.         if(s[i]=='\0')//如果a[i]不等于\0那么说明a[i]还不是数组的尽头
  10.         {
  11.             break;//所以n要自加
  12.         }
  13.         else
  14.         {
  15.             n++;//相反则跳出for循环
  16.         }
  17.     }
  18.     return n;//函数返回n也就是储存数字a长度的变量
  19. }
  20. int main()
  21. {
  22.     scanf("%s",s);
  23.     int m=string_len(s);//使用一个变量来储存函数返回的值
  24.     printf("%d\n",m);//打印变量m的值也就是字符串s的长度
  25.     return 0;
  26. }
复制代码

最后建议尽量少用gets输入字符 ,容易造成地址越界
作者: ★彬★卍囧神    时间: 2014-5-15 16:10
Sniper_YJ 发表于 2014-5-15 15:55
首先需要告诉你的是'\0'不是手动输入的,而是字符串数组自动生成的,我们通过键盘是不可以直接输入'\0'的, ...

懂了...........
作者: NenKeer    时间: 2014-5-15 22:19
这道题我进黑马好像做过。。这是我当时的代码。
  1. int string_len(char *s)
  2. {
  3.         int i ;
  4.         for(i = 0; s[i] != '\0'; i++);
  5.         return i;
  6. }
复制代码

作者: S捭K阖Y    时间: 2014-5-19 12:00
输入的时候 ‘\’应该就代表一个字符了
s代表你的字符数组的首地址,*s++,应该是该位置的值加加,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2