最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中字符串查找操作的兩則實(shí)例分享

 更新時(shí)間:2016年02月04日 15:10:22   作者:Zhang_H  
這篇文章主要介紹了C++中字符串的查找操作的兩則實(shí)例分享,分別是找到第一個(gè)只出現(xiàn)一次的字符以及找出連續(xù)最長的數(shù)字串的方法,需要的朋友可以參考下

在一個(gè)字符串中找到第一個(gè)只出現(xiàn)一次的字符
題目:

    在一個(gè)字符串中找到第一個(gè)只出現(xiàn)一次的字符。如輸入 abaccdeff,則輸出 b。

分析:

    一個(gè)字符串存儲的都是ASCII字符,其ASCII范圍不超過255。

    因此可以再創(chuàng)建一個(gè)255個(gè)元素的數(shù)組存儲字符串中字符出現(xiàn)的個(gè)數(shù)。

    通過兩次遍歷即可求得。

代碼實(shí)現(xiàn)(GCC編譯通過):

#include "stdio.h"
#include "stdlib.h"
 
//查找字符串中第一個(gè)只出現(xiàn)一次的字符
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個(gè)字符,創(chuàng)建一個(gè)255個(gè)元素的映射數(shù)組初始為0
  int asc[255] = {0};
  int i;
   
  //遍歷字符串,同時(shí)做字符的ASCII值映射到數(shù)組下標(biāo)統(tǒng)計(jì)出現(xiàn)次數(shù);
  for(i=0;str[i]!='\0';i++)
    asc[str[i]]++;
 
  //再次遍歷,找到第一個(gè)出現(xiàn)一次的字符即為所求
  for(i=0;str[i]!='\0';i++)
    if(asc[str[i]] == 1)
      return str[i];
  //否則返回空
  return '\0';
}

注:

  •     這種值映射到下標(biāo)是比較常見的一種方式,一些情況下避免了數(shù)組的遍歷。
  •     數(shù)組初始化可以使用函數(shù):void *memset(void *s, int ch, sizet n);
  •     還可以使用指針實(shí)現(xiàn)。


在字符串中找出連續(xù)最長的數(shù)字串
題目:

寫一個(gè)函數(shù),它的原形是 int continumax(char *outputstr,char *intputstr)

功能:

在字符串中找出連續(xù)最長的數(shù)字串,并把這個(gè)串的長度返回,

并把這個(gè)最長數(shù)字串付給其中一個(gè)函數(shù)參數(shù) outputstr  所指內(nèi)存。

例如:"abcd12345ed125ss123456789" 的首地址傳給 intputstr 后,函數(shù)將返回 9,

outputstr  所指的值為 123456789

題目也比較簡單,有一點(diǎn)需要注意

代碼實(shí)現(xiàn)(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'),當(dāng)字符串結(jié)尾出現(xiàn)最長數(shù)字串則無法處理
  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;
}

相關(guān)文章

  • C語言運(yùn)用函數(shù)的遞歸實(shí)現(xiàn)漢諾塔

    C語言運(yùn)用函數(shù)的遞歸實(shí)現(xiàn)漢諾塔

    遞歸(recursive)函數(shù)是“自己調(diào)用自己”的函數(shù),無論是采用直接或間接調(diào)用方式。間接遞歸意味著函數(shù)調(diào)用另一個(gè)函數(shù)(然后可能又調(diào)用第三個(gè)函數(shù)等),最后又調(diào)用第一個(gè)函數(shù)。因?yàn)楹瘮?shù)不可以一直不停地調(diào)用自己,所以遞歸函數(shù)一定具備結(jié)束條件
    2022-07-07
  • C#桌面應(yīng)用開發(fā)實(shí)現(xiàn)番茄定時(shí)器

    C#桌面應(yīng)用開發(fā)實(shí)現(xiàn)番茄定時(shí)器

    本文主要介紹了C#桌面應(yīng)用開發(fā)實(shí)現(xiàn)番茄定時(shí)器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • 使用c++實(shí)現(xiàn)異或加密的代碼示例

    使用c++實(shí)現(xiàn)異或加密的代碼示例

    這篇文章主要為大家介紹了c++實(shí)現(xiàn)異或加密的代碼示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 使用mmap實(shí)現(xiàn)多進(jìn)程對大文件拷貝

    使用mmap實(shí)現(xiàn)多進(jìn)程對大文件拷貝

    這篇文章主要介紹了使用mmap實(shí)現(xiàn)多進(jìn)程對大文件拷貝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C語言利用UDP實(shí)現(xiàn)群聊聊天室的示例代碼

    C語言利用UDP實(shí)現(xiàn)群聊聊天室的示例代碼

    UDP是一個(gè)輕量級、不可靠、面向數(shù)據(jù)報(bào)的、無連接的傳輸層協(xié)議,多用于可靠性要求不嚴(yán)格,不是非常重要的傳輸,如直播、視頻會議等等。本文將利用UDP實(shí)現(xiàn)簡單的群聊聊天室,感興趣的可以了解一下
    2022-08-08
  • C++中繼承與組合的區(qū)別詳細(xì)解析

    C++中繼承與組合的區(qū)別詳細(xì)解析

    C++的“繼承”特性可以提高程序的可復(fù)用性。正因?yàn)椤袄^承”太有用、太容易用,才要防止亂用“繼承”
    2013-09-09
  • C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用

    strcpy和memcpy都是標(biāo)準(zhǔn)C庫函數(shù),strcpy提供了字符串的復(fù)制而memcpy提供了一般內(nèi)存的復(fù)制。下面通過本文重點(diǎn)給大家介紹C/C++中的mem函數(shù)和strcopy函數(shù)的區(qū)別和應(yīng)用,非常不錯(cuò),感興趣的朋友一起看下吧
    2016-08-08
  • 解析在Direct2D中畫Bezier曲線的實(shí)現(xiàn)方法

    解析在Direct2D中畫Bezier曲線的實(shí)現(xiàn)方法

    本篇文章是對在Direct2D中畫Bezier曲線的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ)

    詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ)

    這篇文章主要介紹了C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ),是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-01-01
  • Opencv開發(fā)實(shí)現(xiàn)拼圖游戲

    Opencv開發(fā)實(shí)現(xiàn)拼圖游戲

    這篇文章主要為大家詳細(xì)介紹了Opencv開發(fā)實(shí)現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07

最新評論

大荔县| 田阳县| 汕头市| 黑水县| 平江县| 万全县| 平顺县| 泸溪县| 视频| 莱阳市| 襄汾县| 东至县| 聂拉木县| 鹤庆县| 社会| 永春县| 双桥区| 同仁县| 鄂托克前旗| 乌拉特后旗| 荥阳市| 姚安县| 巴青县| 盐津县| 岳阳市| 桂阳县| 惠州市| 樟树市| 依安县| 巴中市| 霍林郭勒市| 东丰县| 湄潭县| 大方县| 盖州市| 叙永县| 图们市| 西盟| 南陵县| 通渭县| 青冈县|