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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 傘が咲く 于 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问什么没用啊

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

本帖被以下淘专辑推荐:

6 个回复

倒序浏览
20个没有错,/0是两个字符,你应该是想打'\0'
回复 使用道具 举报
兰闻天 发表于 2014-5-15 15:42
20个没有错,/0是两个字符,你应该是想打'\0'

我打\0也是一样的
回复 使用道具 举报
首先需要告诉你的是'\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输入字符 ,容易造成地址越界

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报 1 0
Sniper_YJ 发表于 2014-5-15 15:55
首先需要告诉你的是'\0'不是手动输入的,而是字符串数组自动生成的,我们通过键盘是不可以直接输入'\0'的, ...

懂了...........
回复 使用道具 举报
这道题我进黑马好像做过。。这是我当时的代码。
  1. int string_len(char *s)
  2. {
  3.         int i ;
  4.         for(i = 0; s[i] != '\0'; i++);
  5.         return i;
  6. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
傘が咲く + 1

查看全部评分

回复 使用道具 举报 1 0
输入的时候 ‘\’应该就代表一个字符了
s代表你的字符数组的首地址,*s++,应该是该位置的值加加,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马