年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7932|回复: 4

函数实现在字符串中查找某个字符的几种方法

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

    发表于 2014-3-4 16:28:20 | 显示全部楼层 |阅读模式
    基本方法:
    1. /*
    2. 要求:编写一个函数,查找字符串中是否包含某个字符,如果包含则返回1,否则返回0;
    3. 1、编写带参函数char_contains(),返回int类型;
    4. 2、利用循环,遍历字符串中的每个字符并与要求的某个字符进行比较,如果存在相等则返回1,直接退出函数;
    5. 3、关键在于循环如何实现,考虑可读性,首先用for循环进行简单实现;
    6. 4、修改for循环,使用多种方式实现功能;
    7. */
    8. #include <stdio.h>
    9. #include <stdlib.h>
    10. int char_contains(char str[], char c);
    11. int main() {
    12.    
    13.     char str[] = "yusian.com";  //定义原字符串
    14.    
    15.     char c = 'a';  // 字义字符需要查找的字符
    16.    
    17.     int result = char_contains(str, c); //接收函数返回的值;
    18.    
    19.     printf("%d\n", result);  //打印输出返回值
    20.    
    21.     system("pause");
    22.    
    23.     return 0;
    24.    
    25.     }
    26. int char_contains(char str[], char c) {  // 定义带字符串,字符形参的函数,返回int类型值
    27.    
    28.     int i;  // 定义循环变量i,其实可以在for(时面进行定义可我这个编译器老报错,无奈只能在外面定义,可以忽略此行;
    29.    
    30.     for (i = 0; i < strlen(str); i++) {  // 循环条件,循环次数由字符串长度strlen(str)决定;
    31.         if(str[i] == c) {  // 利用循环变量对字符串进行遍历,并与字符进行对比,如果相同,直接跳出函数返回1;
    32.              return 1;
    33.              }
    34.         }
    35.         
    36.         return 0;  // 如果循环能够进行到底,说明没有找到相关字符,最终返回0;
    37.         
    38.     }
    复制代码
    当前输出结果为:1

  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-4 16:45:44 | 显示全部楼层
    方法二:
    1. int char_contains(char str[], char c) {  // 定义带字符串,字符形参的函数,返回int类型值
    2.    
    3.     int i = strlen(str) - 1;  // 定义循环变量,如果长度为n,取值范围应该为[0 - (n-1)]
    4.    
    5.     while ( i >= 0 ) {  // 循环次数为n次,但字符串取值为[0,n-1]的闭区间,即[0,i]
    6.          
    7.           if (str[i] == c) {  // 这里同样判断字符串中是否包含某个字符
    8.                
    9.                 return 1;
    10.                
    11.                 }
    12.          
    13.           i -- ;  //循环变量改变,否则死循环
    14.          
    15.           }
    16.          
    17.         return 0;  // 如果循环能够进行到底,说明没有找到相关字符,最终返回0;
    18.         
    19.     }
    复制代码


  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-4 16:54:55 | 显示全部楼层
    方法三:
    1. int char_contains(char str[], char c) {  // 定义带字符串,字符形参的函数,返回int类型值
    2.    
    3.     int i = -1;
    4.    
    5.     while ( str[++i] ) {  //利用字符串中最末位为0,取出各字符元素,取出最末位为0,恰好让循环条件为0,退出;  
    6.          
    7.           if (str[i] == c) {
    8.                
    9.                 return 1;
    10.                
    11.                 }
    12.          
    13.           }
    14.          
    15.         return 0;  // 如果循环能够进行到底,说明没有找到相关字符,最终返回0;
    16.         
    17.     }
    复制代码


  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-4 17:17:41 | 显示全部楼层
    方法四:
    1. int char_contains(char str[], char c) {  // 定义带字符串,字符形参的函数,返回int类型值
    2.    
    3.     int i = -1;
    4.    
    5.     /*
    6.      1、从循环条件中进行判断字符串是否包含某个字符,如果包含直接退出循环并返回相应值;
    7.      2、循环条件中真假判断是关键,两个条件做为依据:a:包含某字符、b:已到字符串末尾;
    8.      3、这两个条件只要符合其中一个则必须跳出循环,根据这两点写循环条件;
    9.      4、跳出循环条件要求条件为假,则a:包含某个字符则写成str[++i] = c、b:str[i] == 0;
    10.      5、继续循环的条件是没有找到某个字符并且循环没有结束,某一个不成立则退出循环;
    11.      6、将条件转换成表达式为:str[++i] != c && str[i] != 0
    12.      7、返回结果通过三目运算再次判断是因为找到字符退出,还是找至结尾退出循环来返回0或1;
    13.      */
    14.    
    15.     while ( str[++i] != c && str[i] != '\0');   
    16.          
    17.           return str[i] == '\0' ? 0 : 1;  // 可以简写为return str[i] != '\0'
    18.            
    19.     }
    复制代码


  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

     楼主| 发表于 2014-3-4 17:26:23 | 显示全部楼层

    注意:
    1. while ( str[++i] != c && str[i] != '\0');
    复制代码
    不可改写成:
    1. while ( str[++i] == c || str[i] == '\0');
    复制代码
    两者不一样!!!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-4-27 18:22 , Processed in 0.052962 second(s), 21 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表