亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

C語言字符串操作總結大全

2020-02-24 14:33:44
字體:
來源:轉載
供稿:網友

C語言中,不知道你對C語言字符串了解多少,今天武林技術頻道的小編都將帶來這篇C語言字符串操作總結大全獻給大家,感興趣的你可以參考下,希望本文所提供知識點可以幫助到你。

1)字符串操作
strcpy(p, p1) 復制字符串
strncpy(p, p1, n) 復制指定長度字符串
strcat(p, p1) 附加字符串
strncat(p, p1, n) 附加指定長度字符串
strlen(p) 取字符串長度
strcmp(p, p1) 比較字符串
strcasecmp忽略大小寫比較字符串
strncmp(p, p1, n) 比較指定長度字符串
strchr(p, c) 在字符串中查找指定字符
strrchr(p, c) 在字符串中反向查找
strstr(p, p1) 查找字符串
strpbrk(p, p1) 以目標字符串的所有字符作為集合,在當前字符串查找該集合的任一元素
strspn(p, p1) 以目標字符串的所有字符作為集合,在當前字符串查找不屬于該集合的任一元素的偏移
strcspn(p, p1) 以目標字符串的所有字符作為集合,在當前字符串查找屬于該集合的任一元素的偏移
* 具有指定長度的字符串處理函數在已處理的字符串之后填補零結尾符

2)字符串到數值類型的轉換
strtod(p, ppend) 從字符串 p 中轉換 double 類型數值,并將后續的字符串指針存儲到 ppend 指向的 char* 類型存儲。
strtol(p, ppend, base) 從字符串 p 中轉換 long 類型整型數值,base 顯式設置轉換的整型進制,設置為 0 以根據特定格式判斷所用進制,0x, 0X 前綴以解釋為十六進制格式整型,0 前綴以解釋為八進制格式整型
atoi(p) 字符串轉換到 int 整型
atof(p) 字符串轉換到 double 符點數
atol(p) 字符串轉換到 long 整型

3)字符檢查
isalpha() 檢查是否為字母字符
isupper() 檢查是否為大寫字母字符
islower() 檢查是否為小寫字母字符
isdigit() 檢查是否為數字
isxdigit() 檢查是否為十六進制數字表示的有效字符
isspace() 檢查是否為空格類型字符
iscntrl() 檢查是否為控制字符
ispunct() 檢查是否為標點符號
isalnum() 檢查是否為字母和數字
isprint() 檢查是否是可打印字符
isgraph() 檢查是否是圖形字符,等效于 isalnum() | ispunct()

4)函數原型
原型:strcpy(char destination[], const char source[]);

功能:將字符串source拷貝到字符串destination中
例程:
#include
#include
void main(void)
{
  char str1[10] = { "TsinghuaOK"};
  char str2[10] = { "Computer"};
  cout <} (str1,str2)

運行結果是:Computer
第二個字符串將覆蓋掉第一個字符串的所有內容!
注意:在定義數組時,字符數組1的字符串長度必須大于或等于字符串2的字符串長度。不能用賦值語句將一個字符串常量或字符數組直接賦給一個字符數組。所有字符串處理函數都包含在頭文件string.h中。


strncpy(char destination[], const char source[], int numchars);

strncpy:將字符串source中前numchars個字符拷貝到字符串destination中。
strncpy函數應用舉例
原型:strncpy(char destination[], const char source[], int numchars);
功能:將字符串source中前numchars個字符拷貝到字符串destination中
例程:

#include
#include
void main(void)
{
  char str1[10] = { "Tsinghua "};
  char str2[10] = { "Computer"};
  cout <} (str1,str2,3)

運行結果:Comnghua
注意:字符串source中前numchars個字符將覆蓋掉字符串destination中前numchars個字符!

原型:strcat(char target[], const char source[]);
功能:將字符串source接到字符串target的后面
例程:
#include
#include
void main(void)
{
  char str1[] = { "Tsinghua "};
  char str2[] = { "Computer"};
  cout <} (str1,str2)

運行結果:Tsinghua Computer

注意:在定義字符數組1的長度時應該考慮字符數組2的長度,因為連接后新字符串的長度為兩個字符串長度之和。進行字符串連接后,字符串1的結尾符將自動被去掉,在結尾串末尾保留新字符串后面一個結尾符。

原型:strncat(char target[], const char source[], int numchars);
功能:將字符串source的前numchars個字符接到字符串target的后面
例程:

#include
#include
void main(void)
{
  char str1[] = { "Tsinghua "};
  char str2[] = { "Computer"};
  cout <} (str1,str2,3)

運行結果:Tsinghua Com


原型:int strcmp(const char firststring[], const char secondstring);
功能:比較兩個字符串firststring和secondstring
例程:

#include
#include
void main(void)
{
  char buf1[] = "aaa";
  char buf2[] = "bbb";
  char buf3[] = "ccc";
  int ptr;
  ptr = strcmp(buf2,buf1);
  if(ptr > 0)
   cout <<"Buffer 2 is greater than buffer 1"<  else
   cout <<"Buffer 2 is less than buffer 1"<  ptr = strcmp(buf2,buf3);
  if(ptr > 0)
   cout <<"Buffer 2 is greater than buffer 3"<  else
   cout <<"Buffer 2 is less than buffer 3"<} ;>
;>
;>
;>

運行結果是:Buffer 2 is less than buffer 1
Buffer 2 is greater than buffer 3


原型:strlen( const char string[] );
功能:統計字符串string中字符的個數
例程:

#include
#include
void main(void)
{
char str[100];
cout <<"請輸入一個字符串:";
cin >>str;
cout <<"The length of the string is :"<} (str)

運行結果The length of the string is x (x為你輸入的字符總數字)

注意:strlen函數的功能是計算字符串的實際長度,不包括'/0'在內。另外,strlen函數也可以直接測試字符串常量的長度,如:strlen("Welcome")。


void *memset(void *dest, int c, size_t count);
將dest前面count個字符置為字符c. 返回dest的值.

void *memmove(void *dest, const void *src, size_t count);
從src復制count字節的字符到dest. 如果src和dest出現重疊, 函數會自動處理. 返回dest的值.

void *memcpy(void *dest, const void *src, size_t count);
從src復制count字節的字符到dest. 與memmove功能一樣, 只是不能處理src和dest出現重疊. 返回dest的值.

void *memchr(const void *buf, int c, size_t count);
在buf前面count字節中查找首次出現字符c的位置. 找到了字符c或者已經搜尋了count個字節, 查找即停止. 操作成功則返回buf中首次出現c的位置指針, 否則返回NULL.

void *_memccpy(void *dest, const void *src, int c, size_t count);
從src復制0個或多個字節的字符到dest. 當字符c被復制或者count個字符被復制時, 復制停止.

如果字符c被復制, 函數返回這個字符后面緊挨一個字符位置的指針. 否則返回NULL.

int memcmp(const void *buf1, const void *buf2, size_t count);
比較buf1和buf2前面count個字節大小.
返回值< 0, 表示buf1小于buf2;
返回值為0, 表示buf1等于buf2;
返回值> 0, 表示buf1大于buf2.

int memicmp(const void *buf1, const void *buf2, size_t count);

比較buf1和buf2前面count個字節. 與memcmp不同的是, 它不區分大小寫.

返回值同上.

char *strrev(char *string);
將字符串string中的字符順序顛倒過來. NULL結束符位置不變. 返回調整后的字符串的指針.

char *_strupr(char *string);
將string中所有小寫字母替換成相應的大寫字母, 其它字符保持不變. 返回調整后的字符串的指針.

char *_strlwr(char *string);
將string中所有大寫字母替換成相應的小寫字母, 其它字符保持不變. 返回調整后的字符串的指針.

char *strchr(const char *string, int c);
查找字 串string中首次出現的位置, NULL結束符也包含在查找中. 返回一個指針, 指向字符c在字符串string中首次出現的位置, 如果沒有找到, 則返回NULL.

char *strrchr(const char *string, int c);
查找字符c在字符串string中最后一次出現的位置, 也就是對string進行反序搜索, 包含NULL結束符.
返回一個指針, 指向字符c在字符串string中最后一次出現的位置, 如果沒有找到, 則返回NULL.

char *strstr(const char *string, const char *strSearch);
在字符串string中查找strSearch子串. 返回子串strSearch在string中首次出現位置的指針. 如果沒有找到子串strSearch, 則返回NULL. 如果子串strSearch為空串, 函數返回string值.

char *strdup(const char *strSource);
函數運行中會自己調用malloc函數為復制strSource字符串分配存儲空間, 然后再將strSource復制到分配到的空間中. 注意要及時釋放這個分配的空間.
返回一個指針, 指向為復制字符串分配的空間; 如果分配空間失敗, 則返回NULL值.

char *strcat(char *strDestination, const char *strSource);
將源串strSource添加到目標串strDestination后面, 并在得到的新串后面加上NULL結束符. 源串strSource的字符會覆蓋目標串strDestination后面的結束符NULL. 在字符串的復制或添加過程中沒有溢出檢查, 所以要保證目標串空間足夠大. 不能處理源串與目標串重疊的情況. 函數返回strDestination值.

char *strncat(char *strDestination, const char *strSource, size_t count);
將源串strSource開始的count個字符添加到目標串strDest后. 源串strSource的字符會覆蓋目標串strDestination后面的結束符NULL. 如果count大于源串長度, 則會用源串的長度值替換count值. 得到的新串后面會自動加上NULL結束符. 與strcat函數一樣, 本函數不能處理源串與目標串重疊的情況. 函數返回strDestination值.

char *strcpy(char *strDestination, const char *strSource);
復制源串strSource到目標串strDestination所指定的位置, 包含NULL結束符. 不能處理源串與目標串重疊的情況.函數返回strDestination值.

char *strncpy(char *strDestination, const char *strSource, size_t count);
將源串strSource開始的count個字符復制到目標串strDestination所指定的位置. 如果count值小于或等于strSource串的長度, 不會自動添加NULL結束符目標串中, 而count大于strSource串的長度時, 則將strSource用NULL結束符填充補齊count個字符, 復制到目標串中. 不能處理源串與目標串重疊的情況.函數返回strDestination值.

char *strset(char *string, int c);
將string串的所有字符設置為字符c, 遇到NULL結束符停止. 函數返回內容調整后的string指針.

char *strnset(char *string, int c, size_t count);
將string串開始count個字符設置為字符c, 如果count值大于string串的長度, 將用string的長度替換count值. 函數返回內容調整后的string指針.

size_t strspn(const char *string, const char *strCharSet);
查找任何一個不包含在strCharSet串中的字符 (字符串結束符NULL除外) 在string串中首次出現的位置序號. 返回一個整數值, 指定在string中全部由characters中的字符組成的子串的長度. 如果string以一個不包含在strCharSet中的字符開頭, 函數將返回0值.

size_t strcspn(const char *string, const char *strCharSet);
查找strCharSet串中任何一個字符在string串中首次出現的位置序號, 包含字符串結束符NULL.
返回一個整數值, 指定在string中全部由非characters中的字符組成的子串的長度. 如果string以一個包含在strCharSet中的字符開頭, 函數將返回0值.

char *strspnp(const char *string, const char *strCharSet);
查找任何一個不包含在strCharSet串中的字符 (字符串結束符NULL除外) 在string串中首次出現的位置指針. 返回一個指針, 指向非strCharSet中的字符在string中首次出現的位置.

char *strpbrk(const char *string, const char *strCharSet);
查找strCharSet串中任何一個字符在string串中首次出現的位置, 不包含字符串結束符NULL.
返回一個指針, 指向strCharSet中任一字符在string中首次出現的位置. 如果兩個字符串參數不含相同字符, 則返回NULL值.

int strcmp(const char *string1, const char *string2);
比較字符串string1和string2大小.
返回值< 0, 表示string1小于string2;
返回值為0, 表示string1等于string2;
返回值> 0, 表示string1大于string2.

int stricmp(const char *string1, const char *string2);
比較字符串string1和string2大小,和strcmp不同, 比較的是它們的小寫字母版本.返回值與strcmp相同.

int strcmpi(const char *string1, const char *string2);
等價于stricmp函數, 只是提供一個向后兼容的版本.

int strncmp(const char *string1, const char *string2, size_t count);
比較字符串string1和string2大小,只比較前面count個字符. 比較過程中, 任何一個字符串的長度小于count, 則count將被較短的字符串的長度取代. 此時如果兩串前面的字符都相等, 則較短的串要小.
返回值< 0, 表示string1的子串小于string2的子串;
返回值為0, 表示string1的子串等于string2的子串;
返回值> 0, 表示string1的子串大于string2的子串.

int strnicmp(const char *string1, const char *string2, size_t count);
比較字符串string1和string2大小,只比較前面count個字符. 與strncmp不同的是, 比較的是它們的小寫字母版本. 返回值與strncmp相同.

char *strtok(char *strToken, const char *strDelimit);
在strToken 串中查找下一個標記, strDelimit字符集則指定了在當前查找調用中可能遇到的分界符. 返回一個指針, 指向在strToken中找到的下一個標記. 如果找不到標記, 就返回NULL值. 每次調用都會修改strToken內容, 用NULL字符替換遇到的每個分界符.

c++概念字符串操作

一、char_traits 字符特征類
1)意義:包裝特定串元素的通用行為界面,以便容器實現時依據特征信息而執行特定行為
2)定義了通用類型名

typedef _Elem char_type;
typedef int int_type;
typedef streampos pos_type;
typedef streamoff off_type;
typedef mbstate_t state_type;

其中 int_type 表示字符元素轉換到特定編碼時的整型表示,pos_type, off_type 分別作為字符串索引和字符串元素偏移的類型,類似容器迭中的指針,迭代類型和指針,迭代器的偏移類型。最后的 state_type 用于存儲流狀態,如出錯,格式控制等等。

3)定義了字符 / 字符串操作的包裝界面,以便通用算法的調用

assign(a, b) 定義將 b 字符賦值給 a 字符的過程,實現 a.operator = 的行為
eq(a, b) 定義 a 字符和 b 字符的相等關系,實現 a.operator == 的行為
lt(a, b) 定義 a 小于 b 的關系,實現 a.operator < 的行為
compare(a_ptr, b_ptr, cnt) 定義兩組字符串的比較,返回 int 類型,實現類似 memcmp 的行為
length(ptr) 定義取字符串長度,實現類似 strlen 的行為
copy(a_ptr, b_ptr, cnt) 定義兩組字符串的復制,實現類似 memcpy 的行為
move(a_ptr, b_ptr, cnt) 定義兩組字符串的不重疊復制,實現類似 memmove 的行為
assign(ptr, cnt, ch) 定義了填充字符串的過程,實現類似 memset 的行為
to_int_type(ch) 定義了 char_type 到 int_type 整型的轉換過程
to_char_type(n) 定義了 int_type 到 char_type 字符型的轉換過程
eq_int_type(a, b) 定義兩個和當前 char_type 類型對應的 int_type 的相等關系
eof() 定義字符串結尾符,使用整型表示
not_eof(n) 定義非字符串結尾符,若輸入結尾符,則返回 1,其他輸入返回原值,即總是不返回 eof()

4)int_type 類型應是當前字符類型的整型編碼

二、std::string 并不是序列容器,沒有 front() 和 back() 界面用于取出前端和尾端的元素,使用 std::string::operator [] 并傳遞 streampos 類型取得特定元素,如 std::string::size() - 1 作為索引取得最后一個字符


三、basic_string 支持的初始化
1)默認初始化
2)分配器
3)復制構造
4)局部復制 [_Roff, _Roff + _Count)
5)局部復制 + 分配器
6)C 字符串 [_Ptr, )
7)C 字符串 + _Count [_Ptr, _Ptr + _Count)
8)C 字符串 + 分配器
9)C 字符串 + _Count + 分配器 [_Ptr, _Ptr + _Count)

10)_Count * _Ch
11)_Count * _Ch + 分配器
12)迭代器 [_ItF, _ItL)
13)迭代器 + 分配器

字符到串不能初始化,但支持 operator = 賦值和 operator += 累加賦值運算。

四、字符串的區間有效性
對串的索引訪問在超過字符串的有效區間時,因為串的在實現上對內置的字符緩沖區執行下標訪問,所以不會導致異常,但是將得到不可預知的結果,通常是不可用的。
將其他字符串作為右值輸入時,對該串取出計數大于串大小時按串大小計算。
std::basic_string::size_type 的實際類型為 size_t,在 Visual C++ 7.1 中實現為 unsigned,std::basic_string::npos 被靜態設定為

(basic_string<_Elem, _Traits, _Alloc>::size_type)(-1);

在查找子字符串等操作時,函數返回 npos 的值表示非法索引。


五、比較字符串
允許的比較對象
1)compare(s2) 其他同類型字符串
2)compare(p) C 風格字符串
3)compare(off, cnt, s2) [off, off + cnt) 同 s2 執行比較
4)compare(off, cnt, s2, off2, cnt2) [off, off + cnt) 同 s2 [off2, cnt2) 執行比較
5)compare(off, cnt, p) [off, off + cnt) 同 [p , ) 執行比較
6)compare(off, cnt, p, cnt2) [off, off + cnt) 同 [p, p + cnt2) 執行比較

返回 -1, 0, 1 作為小于、等于和大于的比較結果。

六、附加數據
1)使用 operator += 接受其他字符串,C 風格字符串和字符
2)使用 push_back() 在尾部附加字符,并使得通過字符串構造的 back_iterator 可以訪問
3)append() 附加
1、append(s) 追加字符串
2、append(s, off, cnt) 追加字符串 s [off, off + cnt)
3、append(p) 追加字符串 [p, )
4、append(p, cnt) 追加字符串 [p, p + cnt)
5、append(n, c) 填充 n * c
6、append(InF, InL) 追加輸入流 [InF, InL)

4)insert() 插入
1、insert(off, s2) 插入字符串
2、insert(off, s2, off2, cnt2) 插入字符串 s [off2, off2 + cnt2)
3、insert(off, p) 插入字符串 [p, )
4、insert(off, p, cnt) 插入字符串 [p, p + cnt)

5、insert(off, n, c) 插入 n * c
6、insert(iter) 元素默認值填充
7、insert(iter, c) 插入特定元素
8、insert(iter, n, c) 插入 n*c
9、insert(iter, InF, InL) 插入 [InF, InL)

5)operator +(a, b)
字符串關聯運算符重載中支持 operator + 的形式
1、s + s
2、s + p
3、s + c
4、p + s
5、c + s

七、查找、替換和清除
1)find() 查找
1、find(c, off) 在 s [off, npos) 中查找 c
2、find(p, off, n) 在 s [off, npos) 中查找 [p, p + n)
3、find(p, off) 在 s [off, npos) 中查找 [p, )
4、find(s2, off) 在 s [off, npos) 中查找 s2

2)find() 的變種
1、rfind() 具有 find() 的輸入形式,反序查找
2、find_first_of() 具有 find() 的輸入形式,返回第一個匹配的索引
3、find_last_of() 具有 find() 的輸入形式,返回倒數第一個匹配的索引
4、find_first_not_of() 具有 find() 的輸入形式,返回第一個不匹配的索引
5、find_last_not_of() 具有 find() 的輸入形式,返回倒數第一個不匹配的索引

3)replace() 替換
1、replace(off, cnt, s2) 將 s [off, off + cnt) 替換成 s2
2、replace(off, cnt, s2, off2, cnt2) 將 s [off, off + cnt) 替換成 s2 [off2, off2 + cnt2)
3、replace(off, cnt, p) 將 s [off, off + cnt) 替換成 [p, )
4、replace(off, cnt, p, cnt2) 將 s [off, off + cnt) 替換成 [p, p + cnt2)

5、replace(off, cnt, n, c) 將 s [off, off + cnt) 替換成 c * n

使用迭代器的情況:
6、replace(InF, InL, s2) 將 [InF, InL) 替換成 s2
7、replace(InF, InL, p) 將 [InF, InL) 替換成 [p, )
8、replace(InF, InL, p, cnt) 將 [InF, InL) 替換成 [p, p + cnt)
9、replace(InF, InL, n, c) 將 [InF, InL) 替換成 n * c
10、replace(InF, InL, InF2, InL2) 將 [InF, InL) 替換成 [InF2, InL2)

4)erase() 刪除
1、erase(off, cnt) 從字符串 s 中刪除 s [off, off + cnt)
2、erase(iter) 從字符串 s 中刪除 *iter
3、erase(ItF, ItL) 從字符串 s 中刪除 [ItF, ItL)

八、取出字符串
1)取得 C 風格字符串
c_str() 返回常量類型的 C 風格字符串指針,copy(ptr, cnt, off = 0) 則將指定大小的字符串復制到特定指針。data() 在 Visual C++ 7.1 中僅僅調用了 c_str() 實現。
2)取得子字符串
substr(off, cnt) 取得 s [off, off + cnt) 的副本。
3)復制子字符串
copy(p, off, cnt) 將 s [off, off + cnt) 復制到 p。


九、字符串的緩沖區管理
字符串具有類似 std::vector 的緩沖區管理界面。
size() 取得有效元素長度
max_size() 取得當前內存分配器能分配的有效空間
reserve() 為緩沖區預留空間
capacity() 取得緩沖區的容量
resize() 重設串的長度,可以為其指定初始化值

十、定義輸入迭代器的尾端
向 istream_iterator 傳遞輸入流對象以創建輸入迭代器,輸入迭代器持有輸入流對象的指針,默認創建和讀取流失敗的情況下該指針被設置為 0。并且在實現輸入迭代器間的 operator == 相等運算時,進行持有的流對象指針的相等比較,這樣,默認創建的輸入迭代器將被用于匹配輸入流的結束。

* 當輸入流讀取失敗,用戶執行 if, while 條件判斷時,實際上先將判斷值轉換成 void* 類型,或者根據 operator ! 運算符的返回結果,對輸入流重載 operator void* 和 operator ! 運算符,可以定義輸入流在布爾表達式中的行為,使得當流讀取失敗的情況下,輸入迭代器可以通過布爾表達式來確認,而不是顯式訪問 fail() 成員函數.

以上就是C語言字符串操作總結大全,C語言很強大,當然,我還要繼續學習和研究。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产高清久久久久久91| 国产亚洲欧美一区| 久久99热精品这里久久精品| 精品国产一区二区三区久久久| 国产精品国产福利国产秒拍| 日韩中文在线中文网在线观看| 亚洲人成在线观看网站高清| 久久久www成人免费精品| 欧美日韩免费区域视频在线观看| 欧美极品少妇xxxxⅹ免费视频| 久久av资源网站| 亚洲第一福利视频| 成人免费看黄网站| 免费不卡在线观看av| 国产亚洲a∨片在线观看| 国产成人高清激情视频在线观看| 国产精品久久视频| 日韩亚洲综合在线| 欧美一区亚洲一区| 少妇av一区二区三区| 亚洲视屏在线播放| 尤物tv国产一区| 午夜精品一区二区三区在线| 精品日韩美女的视频高清| 久久久在线观看| 爽爽爽爽爽爽爽成人免费观看| 国产精品丝袜视频| 中日韩美女免费视频网站在线观看| 亚洲欧美日本另类| 久久影视三级福利片| 成人444kkkk在线观看| 国产中文欧美精品| 欧美日韩亚洲系列| 欧美午夜久久久| 日韩电影免费观看中文字幕| 欧美极品少妇xxxxⅹ喷水| 欧美在线一区二区三区四| 国产91色在线播放| 亚洲福利精品在线| 久久久国产成人精品| 日本国产精品视频| 国产亚洲aⅴaaaaaa毛片| 国产噜噜噜噜久久久久久久久| 亚洲春色另类小说| 国产日韩欧美日韩大片| 久久久久www| 久久夜色精品亚洲噜噜国产mv| 欧美日韩另类在线| 国产精品一二三视频| 欧美在线精品免播放器视频| 色偷偷888欧美精品久久久| 在线观看久久久久久| 亚洲国产日韩一区| 色yeye香蕉凹凸一区二区av| 另类色图亚洲色图| 亚洲人成亚洲人成在线观看| 日韩久久精品电影| 成人亚洲激情网| 国产精品h片在线播放| 亚洲丝袜在线视频| 国产69久久精品成人| 欧美午夜精品在线| 国产成人精品免费久久久久| 国产精品综合久久久| 欧美一乱一性一交一视频| 国内精品伊人久久| 国产色婷婷国产综合在线理论片a| 日韩在线观看免费全集电视剧网站| 97在线看免费观看视频在线观看| 中文字幕av一区二区| 2018国产精品视频| 欧美电影在线观看高清| 欧美一级免费看| 精品久久久免费| 国内成人精品一区| 国产成人精品免费久久久久| 97精品伊人久久久大香线蕉| 福利一区视频在线观看| 91美女高潮出水| 中文字幕久久亚洲| 欧美大片免费看| 欧美噜噜久久久xxx| 欧美精品xxx| 国产精品在线看| 日韩av网站在线| 狠狠躁夜夜躁久久躁别揉| 在线激情影院一区| 国产精品久久久久久av福利软件| **欧美日韩vr在线| 91精品久久久久久久久久入口| 国产一区二区三区免费视频| 91精品美女在线| 久久久久久久久久久免费精品| 精品视频偷偷看在线观看| 中文字幕一精品亚洲无线一区| 亚洲欧美在线磁力| 国产亚洲一级高清| 日韩中文理论片| 疯狂欧美牲乱大交777| 成人福利网站在线观看| 国产一区二区三区视频| 日韩欧美在线免费观看| 欧美精品免费在线观看| 亚洲欧美日韩国产中文| 久久综合免费视频| 欧美午夜片在线免费观看| 国产视频精品va久久久久久| 成人免费看黄网站| 国产午夜精品免费一区二区三区| 最近2019好看的中文字幕免费| 91精品国产91| 国产成人一区二区三区| 不卡中文字幕av| 日韩高清av一区二区三区| 啊v视频在线一区二区三区| 欧美日本高清视频| 国产精品一区二区女厕厕| 91色精品视频在线| 国产婷婷成人久久av免费高清| 日韩精品视频在线观看免费| 国产成人精品优优av| 国产精品成人在线| 日韩欧美亚洲综合| 成人黄色免费网站在线观看| 亚洲色图第一页| 欧美一级大片在线观看| 国产精品偷伦免费视频观看的| 一区二区在线视频播放| 亚洲老司机av| 国产精品三级网站| 久久综合伊人77777蜜臀| 国模视频一区二区三区| 亚洲欧美制服中文字幕| 成人av.网址在线网站| 国产成人综合久久| 日韩中文理论片| 精品国产老师黑色丝袜高跟鞋| 日韩有码片在线观看| 精品久久久久久亚洲国产300| 色www亚洲国产张柏芝| 亚洲第一区在线观看| 国产一区二区在线播放| 亚洲国产日韩欧美在线图片| 色哟哟网站入口亚洲精品| 色噜噜狠狠狠综合曰曰曰88av| 久久久久久亚洲精品| 狠狠色狠狠色综合日日五| 亚洲跨种族黑人xxx| 中文字幕无线精品亚洲乱码一区| 亚洲最新在线视频| 中文字幕少妇一区二区三区| 久久国产精彩视频| 亚洲一区二区三区久久| 久久影院免费观看| 亚洲图中文字幕| 国产区精品在线观看| 午夜精品久久17c| 久久久久久久久91| 日韩av高清不卡| 欧美夫妻性生活xx| 久久久影视精品| 国产网站欧美日韩免费精品在线观看| 91麻豆国产语对白在线观看| 亚洲国产99精品国自产|