简单算法题-字符串问题

·  阅读 77

最近看到一道简单的算法问题,刚好有点小空,尝试一下,看下新学的C/C++能不能实现。

题目1:

给定一个字符串和一个字串,需要找出字串出现的个数 例如:“hahahahahhahhha”,找出有多少个”ha“

这个问题就纯粹是C的字符的考察和指针的移动了。

  • 首先我们通过strstr方法找到第一个出现‘ha’的位置以及后续的字符串,将它赋值为指针p
char *p = strstr(str, sub_str);
  • 移动指针P字串的长度,直到指针p为空,就结束,每成功移动一次,更新一次计数count,最终输出count即可
count++;

p+= strlen(sub_str);

p = strstr(p, sub_str);

整体代码如下:

int str_count(char *str, char *sub_str){

    int count = 0;

    char *p = strstr(str, sub_str);

    while(p != NULL){

        count++;

        p+= strlen(sub_str);

        p = strstr(p, sub_str);

    }

    return count;

}

题目2:

给定一个字符串,我们求出字符串的非空字符的长度

例如:"ha hhhhhha haha hhhhhha" 这个题也适合上面的做法,我们把“ ”当作sub_str,然后获取count,再用strlen-count就是非空字符长度。 当然,这一次我们换种做法,我们通过指针的移动来做,如果遇到" ",计数不变,否则+1的方式,指针移动结束,长度也就出来了。

int str_len(char *str){

    int count = 0;

    char *p = str;

    while(*p){

        if(*p != ' '){

            count++;

        }

        p++;

    }

    return count;

}

题目3

给定两个字符串,判断字符串是否相等

这应该是很多地方都见过的一个基础问题,这次我们通过指针的移动方式来判断一下 例如:“ha1haha”,“hahaha”判断这两个字符串是否相等 解题思路: 1.我们把两个字符串赋值给两个指针,指针同时向前移动一个单位,如果指针不相等了,那么直接返回。

int flag = 0;

    char *p = str1;

    char *q = str2;

    while(*p || *q){

        if(*p == *q){

            p++;

            q++;

            flag = 1;

        } else {

            return 0;

        }

    }

2.如果一个指针已经移动到了最后的位置,另外一个还没有结束,这个也代表不相等,也可以直接返回结果

if(p == NULL || q == NULL){

     return 0;

  }

3.如果这两个条件都符合,那么两个字符串确实相等 整体代码如下:

int str_compare(char *str1, char *str2){

    int flag = 0;

    char *p = str1;

    char *q = str2;

    while(*p || *q){
    

        if(p == NULL || q == NULL){

            return 0;

        }

        if(*p == *q){

           p++;

           q++;

           flag = 1;

        } else {

           return 0;

        }
    }

    return flag;
}
分类:
代码人生
标签:
分类:
代码人生
标签:
收藏成功!
已添加到「」, 点击更改