青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

朗朗空間

我知道并不是 所有鳥兒都飛翔

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  16 Posts :: 0 Stories :: 6 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新隨筆

最新評論

閱讀排行榜

評論排行榜

1.strncmp ()函數
strncmp ()函數可以比較到字符串的不同處,也可以比較完由第三個參數指定的字符串。
例如,如果想搜索以”astro”開頭的字符串,您可以限定搜索前5個字符。

//使用strncmp ()函數
#include <stdio.h>
#inlcude <string.h>
 
#define LISTSIZE 5
 
int main (void)
{
    
char * list[LISTSIZE] = {
                
"astronomy", "astounding",
                
"astrophysics", "ostracize",
                
"asterism"   
                
};
    
int count = 0;
    
int i;
    
    
for (i=0; i < LISTSIZE; i++)
    
{
        
if (strncmp (list[i], "astro", 5) == 0)
        
{
            
printf ("Found: %s\n", list[i]);
            
count++;
        
}
    
}
    
    
printf ("The list contained %d words beginning with astro.\n", count);
    
    
return 0;
}

2.strcpy () 和strncpy ()函數
如果pts1和pts2都是指向字符串的指針,則下面的表達式只復制字符串的地址而不是字符串本身。

pts1 = pts2;

如果你確實希望復制字符串,那么可以使用strcpy ()函數。

//copy1.c strcpy ()示例
#include <stdio.h>
#include <string.h> //聲明strcpy ()函數
#define SIZE 40
#define LIM 5
 
int main (void)
{
    
char qwords[LIM][SIZE];
    
char temp[SIZE];
    
int i = 0;
 
    
printf ("Enter %d words beginning with q:\n", LIM);
    
while (i < LIM && gets(temp))
    
{
        
if (temp[0] != 'q')
        
{
            
printf ("%s doesn't begin with q!\n", temp);
        
}
        
else
        
{
            
strcpy (qwords[i], temp);
            
i++;
        
}       
    
}
    
puts ("Here are the words accepted:");
    
for (i=0; i < LIM; i++)
    
{
        
puts (qwords[i]);
    
}
 
    
return 0;
}

請注意只有當輸入的單詞通過了q判斷,計數值i才會增加。
這里使用了一個基于字符的判斷

if (temp[0] != 'q')

這相當于

if (strncmp (temp, "q", 1) != 0)

注意在,strcpy 兩個參數中,第二個參數temp指向的字符串被復制到第一個參數qword[i]所指向的數組中。
temp被稱為源字符串,qword被稱為目標字符串。
為什么要這么設計,為什么不設計到前面?
如果注意到它和賦值語句的順序一樣,目標在左邊,就很容易記住參數的順序。

3.strcpy ()的其它特性
首先,它是一個char *類型,它返回的是第一個參數的值。
第二,第一個參數不需要指向數組的開始,這樣就可以只復制數組的一部分。

//copy2.c
#include <stdio.h>
#include <string.h>
#define WORDS "beast"
#define SIZE 40
 
int main (void)
{
    
char *orig = WORDS;
    
char copy[SIZE] = "Be the best that you can be.";
    
char *ps;
 
    
puts (orig);
    
puts (copy);
    
ps = strcpy (copy + 7, orig);
    
puts (copy);
    
puts (ps);
 
    
return 0;
}

注意ps指向copy的第8個元素,這是因為第一個參數是copy + 7。

4. strncpy ()
strcpy ()的缺點顯而易見,它不檢查目標字符串是否能容納得下源字符串。
strncpy ()會用第三個參數指明最大可復制的字符數。

//copy3.c strncpy ()示例
#include <stdio.h>
#include <string.h> //聲明strcpy ()函數
#define SIZE 40
#define TARGSIZE 7
#define LIM 5
 
int main (void)
{
    
char qwords[LIM][TARGSIZE];
    
char temp[SIZE];
    
int i = 0;
 
    
printf ("Enter %d words beginning with q:\n", LIM);
    
while (i < LIM && gets(temp))
    
{
        
if (temp[0] != 'q')
        
{
            
printf ("%s doesn't begin with q!\n", temp);
        
}
        
else
        
{
            
strncpy (qwords[i], temp, TARGSIZE - 1);
            
qwords[i][TARGSIZE-1] = '\0';
            
i++;
        
}       
    
}
    
puts ("Here are the words accepted:");
    
for (i=0; i < LIM; i++)
    
{
        
puts (qwords[i]);
    
}
 
    
return 0;
}

注意,在這里函數復制的字符串可能最后沒有空字符,所以你必須手動在最后放置一個空字符,而且注意這里是復制n個字符過去,所以要留一個給空字符

,所以在這里是TARGSIZE - 1;

strncpy (qwords[i], temp, TARGSIZE - 1);
qwords[i][TARGSIZE-1] = '\0';

5.sprintf ()函數
sprintf ()函數是在stdio.h而不是在string.h中聲明的。
它的作用和printf ()一樣,但是它寫到字符串里而不是寫到輸出顯示。
它提供了把幾個元素組合成一個字符串的一種途徑。
sprintf ()的第一個參數是目標字符串地址。

//format.c
#include <stdio.h>
#define MAX 20
 
int main (void)
{
    
char first[MAX];
    
char last[MAX];
    
char formal[2 * MAX + 10];
    
double prize;
 
    
puts ("Enter your first name: ");
    
gets (first);
    
puts ("Enter your last name: ");
    
gets (last);
    
puts ("Enter your prize money: ");
    
scanf ("%1f", prize);
    
sprintf (formal, "%s, %-19s: $%6.2f\n", last, first, prize);
    
puts (formal);
 
    
return 0;
}

6.其它字符串函數

char *strcpy (char * s1, const char * s2);

該函數把s2指向的字符串(包括空字符)復制到s1指向的位置,返回值是s1。

char *strncpy (char * s1, const char *s2, size_t n);

該函數把s2指向的字符串(包括空字符)復制到s1指向的位置,復制的字符數不超過n個。返回值是s1。
空字符后的字符串不被復制。
如果源字符串的字符數小于n個,在目標字符串中就以空字符填充。
如果源字符串的字符數大于或等于n個,空字符就不被復制。返回值是s1。

char *strcat (char *s1, const char *s2);

s2指向的字符串(包括空字符)復制到s1指向的結尾。復制過來的s2覆蓋了s1的空字符。返回值為s1。

char *strncat (char *s1, const char *s2);

s2指向的字符串中的前n個字符(包括空字符)復制到s1指向的結尾。復制過來的s2覆蓋了s1的空字符。
s2字符串中的空字符及其后的任何字符都不會被復制,并且追加一個空字符到所得結果后面。
返回值為s1。

int strcmp (const char *s1, const char *s2);

如果s1字符串在機器編碼順序中落后于s2字符串,函數的返回值是一個正數;如果兩個字符串相同,返回值是0;
如果第一個字符串在機器編碼順序中先于第二個字符串,返回值是一個負數。

int strncmp (const char *s1, const char *s2);

該函數作用和strcmp ()一樣,只是比較n個字符后或者遇見第一個空字符時會停止比較。

char *strchr (const char *s1, int c);

該函數返回一個指向字符串s中存放字符c的第一個位置的指針(標志結束的空字符是字符串的一部分,因此也可以搜索到它)。
如果沒有找到該字符,函數就返回空指針。

char *strpbrk (const char *s1, const char *s2);

該函數返回一個指針,指向字符串s1中存放s2字符串的任何字符的第一個位置。如果沒有找到該字符。如果沒找到任何字符,返回空指針。

char *strrchr (const char * s, int c);

該函數返回一個指針,指向字符串s中字符c最后一次出現的地方。(標志結束的空字符是字符串的一部分,因此也可以搜索到它)。
如果沒有找到該字符,函數就返回空指針。

char *strstr (const char *s1, const char *s2)

該函數返回一個指針,指向s1字符串中第一次出現s2字符串的地方。如果在s1中沒找到s2字符串,函數就返回空指針。

size_t strlen (const char *s);

返回字符串的長度。

簡單應用:
在用fgets ()函數時,讀取一行輸入,這個函數把換行符存儲到目標字符串中。
我們可以使用strchr ()函數來用一個空字符替換這個換行符。

char line [80];
char * find;
 
fgets (line, 80, stdin);
find = strchr (line, '\n');
if (find)
{
    *
find = '\0';
}
posted on 2008-05-06 15:28 聶元朗 閱讀(724) 評論(0)  編輯 收藏 引用 所屬分類: C語言學習筆記
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧美激情诱惑| 日韩一区二区久久| 久久久美女艺术照精彩视频福利播放 | 葵司免费一区二区三区四区五区| 国产欧美日韩另类一区| 久久精品国产2020观看福利| 欧美一区二区三区免费视频| 在线免费日韩片| 亚洲国产日韩在线一区模特| 欧美福利在线| 香蕉成人啪国产精品视频综合网| 欧美在线观看视频一区二区三区| 亚洲国产电影| 99riav国产精品| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲国产精品免费| 国产精品免费小视频| 久久久夜夜夜| 欧美日韩在线影院| 久久蜜桃香蕉精品一区二区三区| 麻豆精品视频在线| 亚洲欧美卡通另类91av| 久久久久中文| 亚洲欧美日韩另类| 欧美成人自拍视频| 欧美一区激情| 欧美日韩色婷婷| 欧美v日韩v国产v| 国产乱肥老妇国产一区二| 欧美国产成人精品| 国产欧美一区二区精品仙草咪| 蜜臀av国产精品久久久久| 国产精品成人一区| 亚洲国产精彩中文乱码av在线播放| 国产精品久久久久国产精品日日| 欧美国产免费| 国产自产精品| 亚洲欧美一区二区原创| 亚洲图片欧美日产| 欧美sm视频| 麻豆av一区二区三区| 国产精品免费网站| 99国产精品视频免费观看一公开 | 国产精品美女xx| 亚洲人体偷拍| 亚洲国产精品久久人人爱蜜臀| 亚洲欧美国产三级| 亚洲制服欧美中文字幕中文字幕| 欧美成人小视频| 欧美aa在线视频| 在线播放亚洲一区| 久久精品亚洲精品国产欧美kt∨| 午夜久久久久久| 国产精品白丝av嫩草影院| 亚洲日本成人| 99av国产精品欲麻豆| 欧美二区在线播放| 亚洲国产女人aaa毛片在线| 亚洲成色777777在线观看影院| 午夜精品av| 久久精品盗摄| 国内精品视频在线观看| 欧美亚洲综合在线| 久久久久久网| 经典三级久久| 久久久久综合| 亚洲国产成人不卡| 99热免费精品在线观看| 欧美精品18| 一区二区精品国产| 亚洲免费在线观看| 国产日韩精品久久久| 亚洲一区二区免费在线| 欧美在线观看一二区| 国产午夜精品美女视频明星a级 | 一本久久综合| 欧美一区午夜视频在线观看| 国产日韩欧美高清| 久久精品网址| 亚洲人成精品久久久久| 亚洲一二三区视频在线观看| 国产精品theporn| 亚洲欧美中文日韩v在线观看| 久久精品日韩| 亚洲美女av电影| 国产精品你懂的| 久久噜噜噜精品国产亚洲综合| 欧美激情国产高清| 亚洲视频香蕉人妖| 国产亚洲欧洲| 欧美精选一区| 午夜日韩激情| 91久久精品日日躁夜夜躁国产| 亚洲欧美日韩国产综合精品二区| 黑人操亚洲美女惩罚| 欧美激情精品| 欧美在线观看一区| 亚洲欧洲在线一区| 久久精品一区中文字幕| 亚洲精品欧洲| 国产精品影院在线观看| 欧美aa在线视频| 亚洲欧美在线看| 亚洲精品国精品久久99热一| 久久激情五月丁香伊人| 亚洲美女少妇无套啪啪呻吟| 国产女人精品视频| 欧美成人精品福利| 欧美综合国产精品久久丁香| 亚洲欧洲三级| 玖玖综合伊人| 欧美专区日韩视频| 一区二区不卡在线视频 午夜欧美不卡'| 国产精品久久久久久模特| 欧美a级一区二区| 欧美一级大片在线观看| 一本到高清视频免费精品| 欧美高清一区| 免费在线日韩av| 久久精品30| 亚洲线精品一区二区三区八戒| 亚洲成人自拍视频| 黑人巨大精品欧美黑白配亚洲| 国产精品视频内| 欧美日韩精品二区第二页| 免费成人av| 久久免费少妇高潮久久精品99| 性欧美大战久久久久久久免费观看 | 一区二区三区四区五区精品| 怡红院av一区二区三区| 国产亚洲精品bv在线观看| 国产精品久久久一区麻豆最新章节 | 99香蕉国产精品偷在线观看| 加勒比av一区二区| 黑丝一区二区三区| 国产日韩欧美a| 国产视频久久久久| 国产精品毛片va一区二区三区| 欧美日韩在线视频首页| 欧美日本国产| 欧美日韩1区| 欧美精品激情| 欧美日韩一区二区三| 欧美日韩视频在线观看一区二区三区 | 一区二区三区精品国产| 99在线精品视频在线观看| 夜夜夜久久久| 午夜精品免费在线| 久久国产精品久久精品国产| 欧美亚洲三区| 久久只有精品| 欧美激情一二区| 欧美视频一区二区三区…| 国产精品成人免费精品自在线观看| 欧美激情一区二区三区成人| 欧美日本亚洲| 国产精品素人视频| 国语自产精品视频在线看8查询8| 影音先锋中文字幕一区| 亚洲欧洲精品成人久久奇米网| 日韩视频在线观看免费| 亚洲自拍偷拍福利| 久久久噜噜噜久久狠狠50岁| 免费观看国产成人| 亚洲乱码日产精品bd| 亚洲视频狠狠| 久久久久久久久综合| 欧美国产精品专区| 国产精品青草综合久久久久99| 国产一区二区在线观看免费播放| 亚洲国内高清视频| 亚洲在线观看免费视频| 久久九九全国免费精品观看| 欧美激情一区二区三区蜜桃视频| 亚洲精品在线视频观看| 亚洲欧美日韩精品在线| 欧美不卡视频| 国产欧美三级| 99xxxx成人网| 久久免费一区| av成人动漫| 久久一区激情| 国产九色精品成人porny| 亚洲国产精选| 久久精品一区四区| 一级成人国产| 欧美电影专区| 一区二区视频欧美| 亚洲欧美日韩一区二区在线| 欧美成人精品在线| 性色av一区二区三区| 欧美激情亚洲国产| 亚洲电影在线看| 久久精品欧洲| 中文精品视频一区二区在线观看| 免费观看成人| 精品51国产黑色丝袜高跟鞋| 午夜精品久久久久久久| 亚洲精品美女在线观看| 久久综合电影|