C++中字符串查找操作的兩則實(shí)例分享
在一個(gè)字符串中找到第一個(gè)只出現(xiàn)一次的字符
題目:
在一個(gè)字符串中找到第一個(gè)只出現(xiàn)一次的字符。如輸入 abaccdeff,則輸出 b。
分析:
一個(gè)字符串存儲(chǔ)的都是ASCII字符,其ASCII范圍不超過255。
因此可以再創(chuàng)建一個(gè)255個(gè)元素的數(shù)組存儲(chǔ)字符串中字符出現(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)漢諾塔
遞歸(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í)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
使用mmap實(shí)現(xiàn)多進(jìn)程對(duì)大文件拷貝
這篇文章主要介紹了使用mmap實(shí)現(xiàn)多進(jìn)程對(duì)大文件拷貝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
C語言利用UDP實(shí)現(xiàn)群聊聊天室的示例代碼
UDP是一個(gè)輕量級(jí)、不可靠、面向數(shù)據(jù)報(bào)的、無連接的傳輸層協(xié)議,多用于可靠性要求不嚴(yán)格,不是非常重要的傳輸,如直播、視頻會(huì)議等等。本文將利用UDP實(shí)現(xiàn)簡單的群聊聊天室,感興趣的可以了解一下2022-08-08
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)方法
本篇文章是對(duì)在Direct2D中畫Bezier曲線的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
詳解C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ)
這篇文章主要介紹了C++編程中的主表達(dá)式與后綴表達(dá)式編寫基礎(chǔ),是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01

