日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

字符串面试题(一)字符串逆序

發布時間:2023/11/27 生活经验 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符串面试题(一)字符串逆序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

字符串逆序可以說是最經??嫉念}目。這是一道入門級的題目,相信80%的程序員經歷過這道題。給定一個字符串s,將s中的字符順序顛倒過來,比如s="abcd",逆序后變成s="dcba"。

普通逆序

基本上沒有這么考的,放在這里主要是為了和后面的原地逆序做個對比。很簡單,直接分配一個與原字符串等長的字符數組,然后反向拷貝一下即可。

char* Reverse(char* s)
{//將q指向字符串最后一個字符char* q = s ;while( *q++ ) ;q -= 2 ; //分配空間,存儲逆序后的字符串。char* p = newchar[sizeof(char) * (q - s + 2)] ; char* r = p ;// 逆序存儲while(q >= s)*p++ = *q-- ;*p = '\0' ;return r ;
}

原地逆序

英文叫做in-place reverse。這是最??嫉?#xff0c;原地逆序意味著不允額外分配空間,主要有以下幾種方法,思想都差不多,就是將字符串兩邊的字符逐個交換,如下圖。給定字符串"abcdef",逆序的過程分別是交換字符a和f,交換字符b和e,交換字符c和d。

一 設置兩個指針,分別指向字符串的頭部和尾部,然后交換兩個指針所指的字符,并向中間移動指針直到交叉。

char* Reverse(char* s)
{// p指向字符串頭部char* p = s ;// q指向字符串尾部char* q = s ;while( *q )++q ;q -- ;// 交換并移動指針,直到p和q交叉while(q > p){char t = *p ;*p++ = *q ;*q-- = t ;}return s ;
}

二 用遞歸的方式,需要給定逆序的區間,調用方法:Reverse(s, 0, strlen(s)) ;

// 對字符串s在區間left和right之間進行逆序,遞歸法
void Reverse( char* s, int left, int right )
{if(left >= right)return s ;char t = s[left] ;s[left] = s[right] ;s[right] = t ;Reverse(s, left + 1, right - 1) ;
}

三 非遞歸法,同樣指定逆序區間,和方法一沒有本質區別,一個使用指針,一個使用下標。

// 對字符串str在區間left和right之間進行逆序
char* Reverse( char* s, int left, int right )
{while( left < right ){char t = s[left] ;s[left++] = s[right] ;s[right--] = t ;}return s ;
}

不允許臨時變量的原地逆序

使用異或操作

// 使用異或操作對字符串s進行逆序
char* Reverse(char* s)
{char* r = s ;//令p指向字符串最后一個字符char* p = s;while (*(p + 1) != '\0')++p ;// 使用異或操作進行交換while (p > s){*p = *p ^ *s ;*s = *p ^ *s ;*p = *p-- ^ *s++ ;}return r ;
}

按單詞逆序

給定一個字符串,按單詞將該字符串逆序,比如給定"This is a sentence",則輸出是"sentence a is This",為了簡化問題,字符串中不包含標點符號。

分兩步

1 先按單詞逆序得到"sihT si a ecnetnes"

2 再整個句子逆序得到"sentence a is This"

對于步驟一,關鍵是如何確定單詞,這里以空格為單詞的分界。當找到一個單詞后,就可以使用上面講過的方法將這個單詞進行逆序,當所有的單詞都逆序以后,將整個句子看做一個整體(即一個大的包含空格的單詞)再逆序一次即可,如下圖所示,第一行是原始字符換,第二行是按單詞逆序后的字符串,最后一行是按整個句子逆序后的字符串。

代碼

// 對指針p和q之間的所有字符逆序
void ReverseWord(char* p, char* q)
{while(p < q){char t = *p ;*p++ = *q ;*q-- = t ;}
}// 將句子按單詞逆序
char* ReverseSentence(char* s)
{// 這兩個指針用來確定一個單詞的首尾邊界char* p = s ; // 指向單詞的首字符char* q = s ; // 指向空格或者 '\0'while(*q != '\0'){if (*q == ''){ReverseWord(p, q - 1) ;q++ ; // 指向下一個單詞首字符p = q ;}elseq++ ;}ReverseWord(p, q - 1) ; // 對最后一個單詞逆序ReverseWord(s, q - 1) ; // 對整個句子逆序return s ;
}

逆序打印

還有一類題目是要求逆序輸出,而不要求真正的逆序存儲。這題很簡單,有下面幾種方法,有的方法效率不高,這里僅是提供一個思路而已。

先求出字符串長度,然后反向遍歷即可。

void?ReversePrint(const?char*?s)
{
? ? int?len?=?strlen(s) ;
? ? for?(int?i?=?len?-?1; i?>=?0;?--i)
? ? ? ? cout?
<<?s[i];
}

如果不想求字符串的長度,可以先遍歷到末尾,然后在遍歷回來,這要借助字符串的結束符'\0

void ReversePrint(const char* s)
{const char* p = s ;while (*p)*p++ ;--p ; //while結束時,p指向'\0',這里讓p指向最后一個字符while (p >= s){cout <<*p ;--p ;}
}

對于上面第二種方法,也可以使用遞歸的方式完成。

void?ReversePrint(const?char*?s)
{
? ? if(*(s?+1)?!=?'\0')
? ? ? ? ReversePrint(s?
+?1) ;
? ? cout?
<<?*s ;
}

FROM:?http://www.cnblogs.com/graphics/archive/2011/03/09/1977717.html

總結

以上是生活随笔為你收集整理的字符串面试题(一)字符串逆序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 又黄又爽又色的视频 | 成人免费片库 | 日韩精品免费视频 | 一区二区三区久久 | av黄色在线观看 | 亚洲人妖在线 | 国产在线观看免费视频软件 | 日本不卡视频一区 | 四虎图库 | 婷婷六月激情 | 四虎网址大全 | www.天堂av.com | 91免费看. | 欧美在线一二三四区 | 淫语对白 | 人妻无码中文久久久久专区 | 蜜桃视频在线入口www | 亚洲欧美一区二区三区在线观看 | 亚欧精品视频一区二区三区 | 牛牛在线免费视频 | 狠狠艹| 国产精品91久久久 | 中文字幕在线观看日韩 | 久久网免费视频 | 亚洲精品成人在线 | 国产精品第72页 | 日韩一区三区 | 精品人妻久久久久久888不卡 | 99re视频在线播放 | 人妻av中文系列 | 亚洲成人网络 | 国产精欧美一区二区三区蓝颜男同 | 欧美高清x| 国产夜色精品一区二区av | 亚洲色图欧美日韩 | 大黄一级片| 熟女少妇一区二区 | 久久久久久久一区二区三区 | 久久av导航 | 国产伦精品一区二区三区高清版 | 国产一级黄色电影 | av大片在线免费观看 | 亚洲永久免费 | 精品国产一区二区三区性色av | 欧美午夜精品久久久久久浪潮 | 中文在线а√天堂 | 五月天综合激情网 | 91精品国产色综合久久不卡98 | 这里有精品| 性高跟鞋xxxxhd人妖 | 欧美图片一区二区 | 自拍视频啪| 8x8ⅹ国产精品一区二区 | 九九色精品| 中文字幕一区二区三区人妻四季 | 欧美一级精品 | 亚洲综合区 | 国产美女引诱水电工 | 青青久久av | 日日嗨av一区二区三区四区 | 美国一级片网站 | 精品福利在线观看 | 91在线视频精品 | 调教丰满的已婚少妇在线观看 | 欧美欧美欧美 | freesex性hd公交车上 | 就操在线 | 海量av资源 | 青青草国产 | 苏晴忘穿内裤坐公交车被揉到视频 | 精品视频在线一区二区 | 国产黄大片 | 亚洲成人激情视频 | 男人资源网站 | 日韩女女同性aa女同 | 日韩免费一级片 | 日韩在线观看 | 果冻av在线 | 日韩欧美日本 | 久久精品亚洲 | 色倩网站| 国产精品123 | 影音先锋中文字幕在线 | 成人激情视频在线 | 色视频免费看 | 激情av在线 | av黄色av | 激情在线观看视频 | 欧美综合在线观看 | 国产冒白浆 | 欧美日韩精品久久 | 丰满人妻av一区二区三区 | 天天想你在线观看完整版高清 | 黑人乱码一区二区三区av | 日本黄a三级三级三级 | 爱的色放韩国电影 | 国内自拍av | 九九九九九伊人 | 国产一线二线三线女 |