學習C語言的字符串

  
       重點學習字符串存儲的特殊性,理解字符數組和字符串的區別。掌握字符串的3個方面的特殊性:初始化,輸入輸出,結束字符。掌握常用字符串內置函數的用法,另外還要掌握字符指針的特殊性以及字符數組的用法。
       首先我們先來學習字符串常量,字符串常量是雙引號括起的任意字符序列。字符串需要一個特殊的表示字符串結束的字符“/0,該字符是ASCII碼值爲0的字符,稱爲空字符。字符串常量中可以包含轉義序列。
字符數組與字符串
Ø         在C語言中沒有專門的字符串變量,通常用一個字符數組來存放一個字符串
Ø         字符數組和字符串的區別是:字符串的末尾有一個空字符 ‘/0’
字符串可按如下方式聲明並初始化:
char name[15]={ 'W', 'a', 'n', 'g', 'L', 'i', '/0'};//系統將自動加入一個空字符
char name[15] = "WangLi";
       char password[] = "12345678";/*省略數組大小,系統自動計算,大小爲後面的字符總數加1,最後一個元素存入一個空字符。*/
字符串I/0函數
       我們知道使用scanf語句的不足是接受的字符串中不能包含空格。
示例:
#include <stdio.h>
void main()
{
       
char s1[15];
       
char s2[] = {‘A’,’u’,’d’,’r’,’e’,’y’,’0’};
       
char s3[] = “Michael holding”;
       
int cnt = 0;
       printf(“ 請向數組中輸入一個姓名:”);
       scanf(“
%s”,s1);   
       printf(“ 顯示字符串 ”);
       printf(“第一個字符串是:”);
       
while(s1[cnt] != ‘0’)
       
{
              printf(“
%c”,s1[cnt]);
              cnt 
++;
       }

       printf(“ 第二個字符串是:”);
       printf(“
%s”,s2);
printf(“ 第三個字符串是:”);
       printf(“
%s”,s3);
}

 
使用gets()函數可以克服scanf()函數的侷限性。Gets()函數只有在按下回車鍵後纔會終止,這意味着gets()函數可以接收空格和製表符。由於gets()和puts()是無格式的輸入輸出函數的一部分,建議用fflush(stdin)函數清空緩衝區。
示例:
#include <stdio.h>
void main()
{
       
char name[30];
       
char address[30];
       puts(“請輸入您的姓名:”);
       gets(name);
//使用 gets函數允許輸入空格
       fflush(stdin);//清空緩存區
       puts(“請輸入您的地址:”);
       gets(address);
       fflush(stdin);
       printf(“ 您的姓名和地址是: ”);
       puts(name);
//從鍵盤上讀入一個完整的行,存入字符數組name。並用空字符'
注:對於字符串的輸出,當需要一定的格式輸出時,建議使用printf()函數。
printf("/n 僱員姓名是: ");
puts(name);
printf("/n 僱員所屬部門是: ");
puts(dept);
printf("/n 僱員姓名是%s",name);
printf("/n 僱員所屬部門是%s/n",dept);
puts 函數完全可以由 printf 函數取代。當需要按一定格式輸出時,通常使用 printf 函數。
字符串處理函數
Ø         與字符串有關的內置函數在頭文件string.h中定義
Ø         要使用標準庫字符串處理函數,程序前應該包含:#include <string.h>
其中常用的是:求字符串長度的函數(strlen)、字符串拷貝函數(strcpy)、字符串比較函數(strcmp)、字符串連接函數(strcat)。
示例1:
#include <stdio.h>
#include 
<string.h>
void main()
{
       
char arr[] = "Beijing";
       
int len1, len2;
       len1 
= strlen(arr);
       len2 
= strlen("Shanghai");
       printf(
"  string = %s length = %d", arr, len1);
       printf(
"  string = %s length = %d  ","Shanghai",len2);
}

輸出:
string = Beijing length = 7
 string = Shanghai length = 8
 
示例2:
#include <stdio.h>
#include 
<string.h>
void main()
{
       
char source[] = "Do you love me?";
       
char target[20];
       strcpy(target,source);
       printf(
"  源字符串 = %s", source);
       printf (
"  目標字符串 = %s ", target);
}

輸出:
源字符串 = Do you love me?
 目標字符串 = Do you love me?
示例3:
#include <stdio.h>
#include 
<string.h>
void main()
{
       
char username[15],pwd[15];
       printf(
"  請輸入用戶名: " );
       gets(username);
       printf(
"  請輸入密碼: ");
       gets(pwd);
       
if((strcmp(username,"John")==0&&
                                 (strcmp(pwd,
"123456")==0))
              printf(
"  您已成功登錄   ");
       
else
              printf(
"  用戶名和/或密碼無效   "); 
}

示例4:
#include<stdio.h>
#include
<string.h>
void main()
{
       
char source_string[] = "Love me!";
       
char target_string[30= "MMS";
       strcat(target_string,source_string);
       printf(
"  源字符串 = %s", source_string);
       printf(
"  目標字符串 = %s ", target_string);
}

輸出:
源字符串 = Love me
 目標字符串 = MMS Love me
指向字符串的指針
Ø         在C語言中,可以將字符指針指向字符串
Ø         被指向的字符串可以是一個常量字符串,也可以是一個存儲着字符串的字符數組
我們知道字符串本質上是字符數組,所以指向字符串的指針實際上就是指向字符數組的指針。
我們用字符數組保存一個人的姓名:如
Char name[5] = “Mike”;
在學習了指針以後,我們可以用字符串指針來表達一個人的姓名:如
Char *pname = “Mike”;
此時,由系統自動爲pname分配5個字符的位置,並初始化爲“Mike”。最後一個位置仍然是空字符’/0’。
示例:
#include <stdio.h>
void main()
{
char *ps="Do you love me?";
int n=10;
ps
=ps+n;
printf(
"%s ",ps);
}

輸出:
lives
字符指針數組
字符指針數組:一個數組中的各個元素都是字符指針
char *names [] = {"Apple", "Pear", "Peach", "Banana"};
示例:
void main()
{
       
char *names[] = "Apple"
                       
"Banana",
                         
"Pineapple",
                                      
"Peach",
                                      
"Strawberry",
                             
"Grapes" }
;
      
char *temp;//聲明瞭一個字符指針變量
      printf(“  %%s",names[2],names[3]);
      temp = names[2];
      names[
2= names[3];
      names[
3= temp;
      printf(
"  %s %s",names[2],names[3]);
      printf(
" ");
}

輸出:
Pineapple Peach
Peach Pineapple
字符串作爲函數參數
用戶定義版字符串拷貝函數
void mystrcpy(char dest[ ], char src[ ])
{
       
int i = 0;
       
while(src[i] != '
用戶定義版求字符串長度函數
int mystrlen (char *s) 
{
         
int n = 0;
         
while (*!= '
string.h 中定義了很多字符串處理函數函數比較常用的有strcpy()strcat()strcmp() strlen()
在學習過程中,自己要先把知識點掌握住;然後自己多上機操作,才能達到學習的效果。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章