C&C++常用方法筆記 -常用字符串操作

在下列文字中會使用如下函數(shù)

printf()//打印

sizeof(獲取大小的對象)//獲取大小

atoi(要轉(zhuǎn)換成int的對象) //字符串轉(zhuǎn)換

strtod(將字符串轉(zhuǎn)換成浮點(diǎn)數(shù)

strcmp(字1卡骂,字2)//字符串比較

strstr(包含對象测秸,包含字段)//包含

strlen(字符串)//檢測字符串長度

strcpy(cpy, str);// str 會 copy 到 cpy 里面

strcat(cpy, str);//拼接

substr(str,0,5);//截取 長度0-5的字符

tolower(ch)//大寫轉(zhuǎn)小寫

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <ctype.h>

1.字符串定義

void main(){

// 第一種 字符串?dāng)?shù)組

char str[] = {'D','a','r','r','e','n','\0'};

str[2] = 'y';

printf("%s\n",str);// 字符串結(jié)尾是 '\0'

// 第二種

char *str1 = "Darren";

str1[2] = 'y';

printf("%s", str1);

// 區(qū)別肥卡,一個(gè)能修改一個(gè)不能修改

getchar();

}


2.長度獲取方法?sizeof

int strlen_(char *str){

// 怎么獲取字符串的長度隐孽? 不斷讀取字符臼婆,判斷末尾 '\0'

int len = 0;

while (*str != '\0')

{

len++;

str++;

}

return len;

}

// 字符串長度獲取

void main(){

char *name = "Darren is";

char str[] = { 'D', 'a', 'r', 'r', 'e', 'n', '\0','i','s' };

// 怎么獲取長度丁频?有一種方式計(jì)算(不好使)

// printf("length is %d",sizeof(str)/sizeof(char));

printf("name length is %d\n", strlen(str));

// 自己來寫一個(gè)方法讀取字符串的長度

// strlen_(name);

printf("name length is %d", strlen_(str));

getchar();

}

3 字符串的轉(zhuǎn)換

1.int/float to string/array:

C語言提供了幾個(gè)標(biāo)準(zhǔn)庫函數(shù)按声,可以將任意類型(整型裹粤、長整型终蒂、浮點(diǎn)型等)的數(shù)字轉(zhuǎn)換為字符串,下面列舉了各函數(shù)的方法及其說明遥诉。

● itoa():將整型值轉(zhuǎn)換為字符串拇泣。

● ltoa():將長整型值轉(zhuǎn)換為字符串。

● ultoa():將無符號長整型值轉(zhuǎn)換為字符串矮锈。

● gcvt():將浮點(diǎn)型數(shù)轉(zhuǎn)換為字符串霉翔,取四舍五入。

● ecvt():將雙精度浮點(diǎn)型值轉(zhuǎn)換為字符串苞笨,轉(zhuǎn)換結(jié)果中不包含十進(jìn)制小數(shù)點(diǎn)债朵。

● fcvt():指定位數(shù)為轉(zhuǎn)換精度子眶,其余同ecvt()。

除此外葱弟,還可以使用sprintf系列函數(shù)把數(shù)字轉(zhuǎn)換成字符串壹店,其比itoa()系列函數(shù)運(yùn)行速度慢

2. string/array to int/float

C/C++語言提供了幾個(gè)標(biāo)準(zhǔn)庫函數(shù),可以將字符串轉(zhuǎn)換為任意類型(整型芝加、長整型硅卢、浮點(diǎn)型等)。

● atof():將字符串轉(zhuǎn)換為雙精度浮點(diǎn)型值藏杖。

● atoi():將字符串轉(zhuǎn)換為整型值将塑。

● atol():將字符串轉(zhuǎn)換為長整型值。

● strtod():將字符串轉(zhuǎn)換為雙精度浮點(diǎn)型值蝌麸,并報(bào)告不能被轉(zhuǎn)換的所有剩余數(shù)字点寥。

● strtol():將字符串轉(zhuǎn)換為長整值,并報(bào)告不能被轉(zhuǎn)換的所有剩余數(shù)字来吩。

● strtoul():將字符串轉(zhuǎn)換為無符號長整型值敢辩,并報(bào)告不能被轉(zhuǎn)換的所有剩余數(shù)字。


void main(){

// char * num = "1"; -> int float double

// char *num_str = "12.0xxx";

// int number = atoi(num_str);// 如果不能轉(zhuǎn)換就是 0 弟疆,后面如果有其他不是數(shù)字的就會被剔除 12xxx -> 12

// char *num_str = "12.5f";

// float number = atof(num_str);// 如果不能轉(zhuǎn)換返回的是默認(rèn)值 0.000000

char *num_str = "12.5xx";

double number = strtod(num_str, NULL);

printf("number is %lf",number);

getchar();

}

4字符串的比較?strcmp

C/C++函數(shù)戚长,比較兩個(gè)字符串

設(shè)這兩個(gè)字符串為str1,str2怠苔,

若str1=str2同廉,則返回零;

若str1<str2柑司,則返回負(fù)數(shù)迫肖;

若str1>str2,則返回正數(shù)攒驰。

matlab中函數(shù)蟆湖,strcmp(s1,s2) 判斷兩個(gè)字符串s1和s2是否相同玻粪,相同返回true ,不同返回false


void main(){

char* str1 = "Darren is";

char* str2 = "darren";

// 大于小于等于

// int rc = strcmp(str1, str2);// 區(qū)分大小寫比較

// int rc = _strcmpi(str1, str2);// c strcmpi c++ _strcmpi , andrroid ndk strcasecmp

// 比較前幾個(gè)

// int rc = strncmp(str1, str2,7);// count 代表的是比較字符串前幾個(gè)是否相等

int rc = _strnicmp(str1, str2, 6);

if (rc == 0){

printf("相等");

}

else{

printf("不相等");

}

getchar();

}

5 字符串查找隅津,包含?strstr

包含文件:string.h

函數(shù)名: strstr

函數(shù)原型:

1externchar*strstr(char*str1,?constchar*str2);

語法:

1*?strstr(str1,str2)

str1: 被查找目標(biāo) string expression to search.

str2: 要查找對象 The string expression to find.

返回值:若str2是str1的子串,則返回str2在str1的首次出現(xiàn)的地址奶段;如果str2不是str1的子串,則返回NULL剥纷。

void main(){

char* str = "name is Darren";

char *substr = "not";

char* pos = strstr(str, substr);// 返回的是字符串第一次出現(xiàn)的位置(位置指針), 如果沒有找到返回的是空

// 求一下位置 int 怎么辦痹籍? strstr

// int postion = pos - str;

// printf("第一次出現(xiàn)的位置是:%d\n",postion);

// 包含?pos 是不是空就可以了

if (pos){

printf("%s", "包含");

}

else{

printf("%s", "不包含");

}

getchar();

}

6 拼接晦鞋,截取蹲缠,大小寫轉(zhuǎn)換

void main(){

// strcpy(); copy進(jìn)來

char* str = "darren";

char *str1 = " is";

// char* str1 = "is";

int len = strlen(str);// cpy[len] android studio 是可以的

char cpy[20];

// str 會 copy 到 cpy 里面

strcpy(cpy, str);

printf("%s\n",cpy);

// 拼接

strcat(cpy,str1);

printf("%s", cpy);

getchar();

}

char * substr(char * str,int start,int end){

// 開辟一個(gè)字符串去存儲我們的數(shù)據(jù)棺克,開辟多大計(jì)算

// char sub[end-start];

int len = end - start;

char* sub = (char*)malloc(len*sizeof(char)+1);// 記得加上1 ,在 NDK 一般會采用靜態(tài)的數(shù)組存儲 char sub[len]

// malloc 一定要 free

// 遍歷賦值

str += start;

for (int i = 0; i < len; i++)

{

sub[i] = *str;

str++;// 指針往后邏一位

}

// 標(biāo)記字符串結(jié)尾线定,否則 print 無法判斷結(jié)尾

sub[len] = '\0';

printf("%p\n",sub);

// free(sub);

return sub;

}

7 字符串的截取?substr

void main(){

char *str = "Darren is";

// 截取第三個(gè)位置到第五個(gè)位置 3娜谊,5

char *sub = substr(str,0,5);

printf("%p\n", sub);

printf("%s",sub);

// 一定要 free ,因?yàn)槟愕?substr 有動(dòng)態(tài)開辟內(nèi)存斤讥,但是真正開發(fā)過程中并不會這么做纱皆,自己的方法盡量要自己處理好內(nèi)存

free(sub);

getchar();

}

// dest 用來存放結(jié)果,大小自己指定

// source 需要轉(zhuǎn)換的字符串

void lower(char* dest,char* source){

while (*source != '\0'){

// 拿當(dāng)前字符

char ch = *source;

// 轉(zhuǎn)完賦值給 dest

*dest = tolower(ch);// a -> a A -> a

// 接著指針 ++ 芭商,遍歷下一個(gè)

source++;

dest++;

}

// 標(biāo)記字符串結(jié)尾

*dest = '\0';

}

8 大小寫轉(zhuǎn)換 lower

void main(){

char* name = "daRRen";

char dest[20];

lower(dest,name);

printf("%s",dest);

getchar();

}

*/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末派草,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铛楣,更是在濱河造成了極大的恐慌近迁,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件簸州,死亡現(xiàn)場離奇詭異鉴竭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岸浑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進(jìn)店門搏存,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人助琐,你說我怎么就攤上這事祭埂。” “怎么了兵钮?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵蛆橡,是天一觀的道長。 經(jīng)常有香客問我掘譬,道長泰演,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任葱轩,我火速辦了婚禮睦焕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘靴拱。我一直安慰自己垃喊,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布袜炕。 她就那樣靜靜地躺著本谜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪偎窘。 梳的紋絲不亂的頭發(fā)上乌助,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天溜在,我揣著相機(jī)與錄音,去河邊找鬼他托。 笑死掖肋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赏参。 我是一名探鬼主播志笼,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼登刺!你這毒婦竟也來了籽腕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤纸俭,失蹤者是張志新(化名)和其女友劉穎皇耗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揍很,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郎楼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窒悔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呜袁。...
    茶點(diǎn)故事閱讀 38,687評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖简珠,靈堂內(nèi)的尸體忽然破棺而出阶界,到底是詐尸還是另有隱情,我是刑警寧澤聋庵,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布膘融,位于F島的核電站,受9級特大地震影響祭玉,放射性物質(zhì)發(fā)生泄漏氧映。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一脱货、第九天 我趴在偏房一處隱蔽的房頂上張望岛都。 院中可真熱鬧,春花似錦振峻、人聲如沸臼疫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烫堤。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塔逃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工料仗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留湾盗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓立轧,卻偏偏與公主長得像格粪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子氛改,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容