C primer plus第十一章:字符串和字符串函數(shù)

指針數(shù)組暑刃,還是向數(shù)組的指針?

由于方括號[]的優(yōu)先級要高于*號膜眠,所以
char *m[5]表示一個由五個指針構(gòu)成的數(shù)組岩臣。

(char *)m[5]表示一個指針,一個指向有五個元素的數(shù)組的指針宵膨。

數(shù)組和指針的區(qū)別

char m1[]="abcdefg";
char m2*="abcdefg"

  • m1是一個常量架谎,是不能執(zhí)行m1++的,但是可以通過m1+1來訪問m1的第二個元素辟躏。
  • 而m2是個變量谷扣,可以進行m2++。
  • m1的值可以賦給m2,但是m2的值不能賦給m1

二維數(shù)組和指針數(shù)組的區(qū)別

char a1[5][81];
char *a2[5]

a1是一個有5個元素的數(shù)組捎琐,而每個元素又是一個81個char的數(shù)組会涎,所以聲明a1的時候,就為之聲明了5*81個char的空間瑞凑。
a2是一個含有5個指針的數(shù)組末秃,每個指針指向一個字符串,字符串所占用的空間可由初始化字符串時的字符串長度決定籽御。
所以练慕,第二種聲明方式比第一種聲明方式比較節(jié)省空間。

三個輸入函數(shù)的區(qū)別

gets()遇到換行符就會停止輸入技掏,它適合用來讀取一行字符串贺待。返回一個指向char類型的指針值。
scanf()遇到空格就會停止輸入零截,所以它適合用來讀取單詞麸塞。返回成功讀取項目的個數(shù)。
fgets()既能讀空格又能讀換行符涧衙,它有三個參數(shù)哪工,fget(指針的地址奥此,讀入的長度,輸入文件)雁比,當通過鍵盤輸入時稚虎,第三個參數(shù)為stdin。
當讀到第二個參數(shù)的長度或者換行符時偎捎,停止讀取蠢终。

常用的字符串函數(shù)

函數(shù)都包含在string.h頭文件里

strcat()函數(shù)

strcat()函數(shù)需要兩個字符串參數(shù),將第二個字符串的一份拷貝添加到第一個字符串的結(jié)尾茴她。從而連接了兩個字符串寻拂。返回值是第一個參數(shù)更新后的值。

strncat()函數(shù)

strncat(char * c1丈牢,char * c2祭钉,int n);
后面的n為讀c2的前n個字符,讀到第n個字符或者遇到換行符都會停止讀取己沛,然后將讀取到的字符接到c1的末尾

strcmp()函數(shù)

strcmp(cha * c1,char * c2);
顧名思義慌核,string compare,比較c1和c2申尼,
如果c1c完全相同垮卓,則返回0。
如果不同师幕,比較第一個c1c2不同的字符扒接,如果c2中的字符的ASCII值大于c1中的字符的ASCII值,返回1们衙,否則钾怔,返回-1。

strncmp()函數(shù)

strcmp(cha * c1,char * c2,n);
比較c1c1的前n個字符蒙挑,返回結(jié)果與strcmp()函數(shù)相同.

strcpy()函數(shù)

有兩個字符串參數(shù)宗侦,將第二個字符串參數(shù)復(fù)制到第一個字符串參數(shù),返回第一個參數(shù)的值忆蚀。
由于字符串的名字只是一個地址矾利,所以在初始化字符串之后就不能再給字符串復(fù)制,像這樣“str="abcde"
只能strcpy(str,"abcde")”

strchr()函數(shù)

char *strchr(const char *s,int c);
返回字符串中存放字符c的第一個位置的指針馋袜,如果沒有找到該字符男旗,就返回空指針。

//strchr函數(shù)
#include<stdio.h>
#include<string.h>
int main()
{
    char *a="abcdefg";//聲明一個指針欣鳖,
    char c='e';
    char *b;//用來存放返回的指針
    b=strchr(a,c);
    printf("%p %p\n",a,b);//輸出的結(jié)果是兩個相差4的地址察皇,因為e字符數(shù)組里的第4個元素。
    b=strchr(a,'z');
    printf("%p %p\n",a,b);//輸出的b是8個0的空指針
    return 0;
}

strpbrk(const char *s1,const char *s2)函數(shù)

返回一個指針,指向s1字符串中存放s2中任一字符串的地方什荣,如果找不到矾缓,則返回空指針

#include<stdio.h>
#include<string.h>

int main()
{
    char *s1="abcdefg";
    char *s2="efghijk";//s1和s2中第一個共同的元素是e
    char *a;
    a=strpbrk(s1,s2);
    printf("%p %p %d\n",s1,a,a-s1+1);//第一個地址和第二個地址相差4,e是s1中的第5個元素
    return 0;
}

strrchr(const char *s,int c)

和strchr()類似稻爬,不過他返回的是最后一次出現(xiàn)c的地方

字符串排序

原理是冒泡排序加strcmp函數(shù)的調(diào)用嗜闻。并不難。

#include<stdio.h>
#include<string.h>
#define SIZE 81
#define LIM 20
#define HALT " "
void stsrt(char *strings[],int num);

int main()
{
    char input[LIM][SIZE];
    char *ptstr[LIM];
    int ct = 0;
    int k;

    printf("Input up to %d lines, and I will sort them.\n",LIM);
    printf("To stop, press the Enter key at a line's start. \n");
    while(ct < LIM && gets(input[ct]) != NULL && input[ct][0] != '\0')
    {
        ptstr[ct] = input[ct];
        ct++;
    }
    stsrt(ptstr, ct);
    puts ("\nHere's the sorted list: \n");
    for(k = 0;k < ct; k++)
        puts(ptstr[k]);
    return 0;
}

void stsrt(char *strings[],int num)
{
    char *temp;
    int top,seek;

    for(top = 0; top < num-1; top++)
        for(seek = top + 1; seek < num ; seek++)
            if(strcmp(strings[top], strings[seek]) > 0)
            {
                temp = strings[top];
                strings[top] = strings [seek];
                strings[seek] = temp;
            }
}

圖片發(fā)自簡書App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末桅锄,一起剝皮案震驚了整個濱河市琉雳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌友瘤,老刑警劉巖翠肘,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異商佑,居然都是意外死亡,警方通過查閱死者的電腦和手機厢塘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門茶没,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晚碾,你說我怎么就攤上這事抓半。” “怎么了格嘁?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵笛求,是天一觀的道長。 經(jīng)常有香客問我糕簿,道長探入,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任懂诗,我火速辦了婚禮蜂嗽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殃恒。我一直安慰自己植旧,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布离唐。 她就那樣靜靜地躺著病附,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亥鬓。 梳的紋絲不亂的頭發(fā)上完沪,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音嵌戈,去河邊找鬼丽焊。 笑死较剃,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的技健。 我是一名探鬼主播写穴,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼雌贱!你這毒婦竟也來了啊送?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤欣孤,失蹤者是張志新(化名)和其女友劉穎馋没,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體降传,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡篷朵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婆排。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片声旺。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖段只,靈堂內(nèi)的尸體忽然破棺而出腮猖,到底是詐尸還是另有隱情,我是刑警寧澤赞枕,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布澈缺,位于F島的核電站,受9級特大地震影響炕婶,放射性物質(zhì)發(fā)生泄漏姐赡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一柠掂、第九天 我趴在偏房一處隱蔽的房頂上張望雏吭。 院中可真熱鬧,春花似錦陪踩、人聲如沸杖们。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摘完。三九已至,卻和暖如春傻谁,著一層夾襖步出監(jiān)牢的瞬間孝治,已是汗流浹背镇防。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工尘盼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啡浊,地道東北人肪凛。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像杭措,于是被迫代替她去往敵國和親费什。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

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

  • 本文轉(zhuǎn)自:http://www.cnblogs.com/lidabo/p/5225868.html 1)字符串操作...
    XiaohuiLI閱讀 9,500評論 0 0
  • 一手素、字符串操作 strcpy(p, p1) 復(fù)制字符串 strncpy(p, p1, n) 復(fù)制指定長度字符串 s...
    JaiUnChat閱讀 1,655評論 0 7
  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型鸳址。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu)泉懦; ...
    朱森閱讀 3,430評論 3 44
  • 作者 謝恩銘稿黍,公眾號「程序員聯(lián)盟」(微信號:coderhub)。轉(zhuǎn)載請注明出處崩哩。原文:https://www.ji...
    程序員聯(lián)盟閱讀 2,404評論 3 33
  • 恐怕不止我一個人要感謝董卿和詩詞大會這個節(jié)目巡球,因為我們終于開始有意識地思考: 到底有多久沒有看書和學(xué)習(xí)了? 現(xiàn)在的...
    齊寶寶520閱讀 131評論 0 0