C++中字符串查找操作的两则实例分享

 更新时间:2016年02月04日 15:10:22   作者:Zhang_H  
这篇文章主要介绍了C++中字符串的查找操作的两则实例分享,分别是找到第一个只出现一次的字符以及找出连续最长的数字串的方法,需要的朋友可以参考下

在一个字符串中找到第一个只出现一次的字符
题目:

    在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。

分析:

    一个字符串存储的都是ASCII字符,其ASCII范围不超过255。

    因此可以再创建一个255个元素的数组存储字符串中字符出现的个数。

    通过两次遍历即可求得。

代码实现(GCC编译通过):

#include "stdio.h"
#include "stdlib.h"
 
//查找字符串中第一个只出现一次的字符
char firstSingle(char * str);
 
int main(void)
{
  char str[] = "abaccdeff";
  char tmp = firstSingle(str);
  printf("%c\n",tmp);
 
  return 0;
}
 
char firstSingle(char * str)
{
  //ASCII表有255个字符,创建一个255个元素的映射数组初始为0
  int asc[255] = {0};
  int i;
   
  //遍历字符串,同时做字符的ASCII值映射到数组下标统计出现次数;
  for(i=0;str[i]!='\0';i++)
    asc[str[i]]++;
 
  //再次遍历,找到第一个出现一次的字符即为所求
  for(i=0;str[i]!='\0';i++)
    if(asc[str[i]] == 1)
      return str[i];
  //否则返回空
  return '\0';
}

注:

  •     这种值映射到下标是比较常见的一种方式,一些情况下避免了数组的遍历。
  •     数组初始化可以使用函数:void *memset(void *s, int ch, sizet n);
  •     还可以使用指针实现。


在字符串中找出连续最长的数字串
题目:

写一个函数,它的原形是 int continumax(char *outputstr,char *intputstr)

功能:

在字符串中找出连续最长的数字串,并把这个串的长度返回,

并把这个最长数字串付给其中一个函数参数 outputstr  所指内存。

例如:"abcd12345ed125ss123456789" 的首地址传给 intputstr 后,函数将返回 9,

outputstr  所指的值为 123456789

题目也比较简单,有一点需要注意

代码实现(GCC编译通过):

#include "stdio.h"
#include "stdlib.h"
 
int continumax(char * outputstr,char * inputstr);
 
int main(void)
{
  char *in = "abcd12345ed125dd123456789";
  char *out = (char *)malloc(sizeof(char)*100);
   
  int i = continumax(out,in);
 
  printf("%d\n",i);
  printf("%s\n",out);
  return 0;
}
 
int continumax(char * outputstr, char * inputstr)
{
  int len,max,i;
  char *p;
 
  len = max = 0;
 
  //若写成while(inputstr != '\0'),当字符串结尾出现最长数字串则无法处理
  while(1)
  {  
    if(*inputstr >= '0' && *inputstr <= '9')
    {
      len++;
    }
    else
    {
      if(len >max)
      {
        max = len;
        p = inputstr - len;
      }
      len = 0;
    }
    if(*inputstr++ == 0) 
      break;
  }
 
  for(i = 0;i<max;i++)
    *outputstr++ = *p ++;
 
  *outputstr = '\0';
 
  return max;
}

相关文章

  • C语言实现跨文件传输数据的几种方式

    C语言实现跨文件传输数据的几种方式

    C语言是一种强大的、通用的编程语言,常用于系统级编程,包括硬件交互,如中断处理和数据采集,在本文中,我们将深入探讨如何使用C语言进行跨文件数据传输,文中有相关的代码供大家参考,需要的朋友可以参考下
    2024-08-08
  • 一文带你掌握C++中的继承

    一文带你掌握C++中的继承

    继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,本文详解介绍了C++中的继承,感兴趣的同学可以借鉴一下
    2023-05-05
  • c++ 判断是64位还是32位系统的实例

    c++ 判断是64位还是32位系统的实例

    这篇文章主要介绍了c++ 判断是64位还是32位系统的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++超详细讲解引用和指针

    C++超详细讲解引用和指针

    引用是C++一个很重要的特性,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量或对象的操作完全等价,这篇文章主要给大家总结介绍了C++中引用的相关知识点,需要的朋友可以参考下
    2022-06-06
  • VS2010 C++ 配置优化方案

    VS2010 C++ 配置优化方案

    使用VS2010的时候,发现了不少问题,而本文则是介绍使用中需要的问题,已经解决方案。
    2014-10-10
  • C语言运算符深入探究优先级与结合性及种类

    C语言运算符深入探究优先级与结合性及种类

    C语言运算符号指的是运算符号。C语言中的符号分为10类:算术运算符、关系运算符、逻辑运算符、位操作运算符、赋值运算符、条件运算符、逗号运算符、指针运算符、求字节数运算符和特殊运算符
    2022-05-05
  • OpenCV实现更改图片颜色功能

    OpenCV实现更改图片颜色功能

    这篇文章主要为大家详细介绍了如何利用OpenCV实现更改图片颜色的功能,文中代码介绍详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 如何解决C++未定义标识符 “string“、未定义标识符 “cout“、“name”:未知重写说明符错误

    如何解决C++未定义标识符 “string“、未定义标识符 “cout“、“name”:未知重写说明

    在C++编程中,未定义标识符"string"、"cout"错误多因缺少头文件引入造成,而"name":未知重写说明符错误则是未正确重写基类成员函数,解决未定义标识符错误需正确引入<string>和<iostream>头文件,对于未知重写说明符错误
    2024-09-09
  • C语言中main函数两个参数的作用

    C语言中main函数两个参数的作用

    这篇文章主要介绍了C语言中main函数两个参数的作用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • c++ 虚函数与纯虚函数的区别(深入分析)

    c++ 虚函数与纯虚函数的区别(深入分析)

    本篇文章是对c++中虚函数与纯虚函数的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05

最新评论