字符串及相關應用


  1)字符串的輸出和輸入

      a、保存字符串:char str[10]="HelloWorld!";
     例子:char str[10]="Hello";
       for(int i=0;i<10;i++){
   printf("%c\t",str[i]);//輸出:H e l l o      --後面會自動補充爲ASCII默認初始化的值
}
 b、使用%s便是輸入輸出的是一個字符串。
    %s從給定的地址開始,一直輸出字符串,直到遇到\0就停止了。
printf("%s\n",str[0]);//輸出爲H
printf("%s\n",str);//輸出爲Hello
printf("%s\n",&str[0]);//輸出爲Hello
 
char ch[10]={'a','b','c','d','e','\0'};
printf("%s\n",ch);//輸出結果爲:abcde
char ch[10]={'a','b','c','d','e'};
printf("%s\n",ch);//輸出結果爲:abcde
 
 c、%s接收鍵盤上輸入的一個字符串
    例如:
char str[10];
scanf("%s",&str);//從鍵盤上接收一個字符串,保存在以str爲首地址的字符數組中
printf("%s\n",str);//輸出結果爲:鍵盤輸入的內容
 d、注意:①如果以%s格式進行輸入的話,注意空格問題
          ②如果輸入的字符串有空格,則空格之後的字符則無法被接收保存
  ③(以%s的格式輸入,scanf遇到了空格就結束了)
  ④輸入的字符串的長度要小於字符數組的長度


  2)字符串結束符使用
      a、char str[]="abc";
 實際上str中存儲了 str[0]-->a   str[1]-->b   str[2]-->c   str[3]-->\0
 
 b、在C語言中沒有專門的字符串變量,通常用一個字符數組來存放一個字符串。
    注意:①我們在把一個字符串存入一個字符數組時,也把結束符'\0'存入數組,並以此作爲該字符串是否結束的標誌。有了'\0'標誌後,就不必再用字符數組的長度來判斷字符串的長度了。
      ②C語言允許用字符串的方式對字符數組作初始化賦值。例如:
        char ch[]={'c',' ','p','r','o','g','r','a','m'};
 
 c、注意:下面的程序遇到\0纔會停止
 //輸出的結果是:xyzab
 void main(){
char ch[]={'a','b','\0'};//程序輸出遇到\0就停止
char ch1[]={'x','y','z'};
printf("%s\n",ch1);
 }
 //輸出的結果是:xyza
 void main(){
char ch[]={'a','\0','b'};//程序輸出遇到\0就停止
char ch1[]={'x','y','z'};
printf("%s\n",ch1);
 }
 //輸出結果爲:adsdf
 void main(){
char ch[10]="adsdf\0sdf";//程序輸出遇到\0就停止
printf("%s\n",ch);
 }
 
  3)字符串長度計算方法
     a、下面示例中字符串長度恰好等於字符數組中佔用的字節數
  char str[]="abc";
  printf("%s\n",sizeof(str));//輸出結果(包含\0)爲:4
b、char str="abc\0def";
   printf("%s\n",sizeof(str));//輸出結果爲:8
     c、專門計算字符串長度的方法
    ①使用字符串函數strlen()
  char str="abc\0def";
  strlen(str);//輸出長度爲7
②以'\0'作爲條件進行判斷  遇到'\0'就結束,'\0'之前的就是字符串的長度
  不知道數組的長度的情況下,計算字符串的長度,用while循環計算
  char str[]="asdfasdfasdfasdf"; 
  int i=0;
  while(str[i]!='\0'){
i++;
  }
  printf("%d\n",i);//輸出的就是字符串的長度16
 
d、練習:
   判斷某個字符串中是否包含某個字符,如果包含,則返回其首次出現的位置,否則返回-1
   
searchChar(char str[],char key){
//循環依次取得字符串的每一個字符
for(int i=0;str[i]!='\0';i++){
if(str[i]==key){
return i;
}
}
return -1;
}
void main(){
char str[]="asdfasxyasdfasdkdasf";
int loc=searchChar(str,'x');
printf("%d\n",loc);//輸出結果爲6
}
 
  4)字符數組和普通數組的區別
     實際上,字符數組和普通數組一樣,沒有本質的區別。
數組名永遠是一個指針,指向第一個元素的地址,即數組首地址。
字符數組的每個元素都是char類型,整形數組的每個元素都是int類型。
scanf()和printf()函數都有一種格式化字符串%s可以用來整體輸入輸出字符數組,但是沒有特定的格式支持int數組整體輸出。
 
  5)字符串處理函數:puts、gets、strcat
     a、C語言提供了豐富的字符串處理函數,大致可以分爲字符串的輸入、輸出、合併、修改、比較、轉換、複製、搜索幾類。使用這些函數可以大大減輕編程的負擔。
        ①用於輸入輸出字符串函數,在使用前應包含頭文件"stdio.h"  
②使用其他字符串函數則應包含頭文件"string.h".
 b、使用puts和gets必須包含頭文件 stdio.h
    puts()    輸出一個字符串   //puts(字符數組名);
①可以自動換行
②也可以不是數組的首地址,可以使元素的地址
③必須是字符數組
④不可以格式化輸出 //puts("--%s",str);報錯,編譯不通過
例如:
    char str[]="asdfsdf";
puts(str);//輸出結果爲:asdfsdf
puts(&str[0]);//輸出結果爲:asdfsdf
puts(&str[1]);//輸出結果爲:sdfsdf
puts(&str[2]);//輸出結果爲:dfsdf


gets()    輸入一個字符串   //gets(字符數組名)
①使用gets會給出警告:不安全-->數組長度存在越界問題
②使用gets可以接受空格,scanf不可以接受空格
例如:
    char str[100];
gets(str);  
 
strcat()    連接一個字符串,把兩個字符串連接成一個字符串
    ①使用strcat必須包含頭文件 string.h
②格式:strcat(字符串1,字符串2);、
③字符串1的長度要足夠大,要保證能夠裝下字符串2
④可以理解爲字符串2把字符串1中的'\0'覆蓋掉了
例如:
cahr str[100]="welcome to "; 
        char str2[]="Chine"
strcat(str,str2);
puts(str);//輸出結果爲:welcome to China
 c、字符串函數學習
①字符串拷貝函數:strcpy
    格式:strcpy(oldStr,newStr);
可以理解爲把newStr拷貝到oldStr中,newStr會覆蓋掉oldStr中的內容
例如:
    char str1[100]="fengjie";
char str2[]="bangzhang";
puts(str1);
puts(str2);
strcpy(str1,str2);//str2拷貝到str1中  注:str1要足夠大,否則可能會越界
②字符串比較函數:strcmp
    格式:strcmp(str1,str2);//比較兩個字符串的大小
規則:比較字符的ASCII碼值   比較在字典中出現的順序
比較過程:逐個取兩個字符串的字符對應位比較,從第一位不相同的位開始,就能夠確定字符串大小
例如:
    char str1[]="abs";
char str2[]="def";//大
strcmp(str1,str2);//函數有返回值
  返回值>0,str1>str2;
  返回值<0,str1<str2;
  返回值=0,str1=str2;
③測量字符串長度函數:strlen
    注意:strlen()不包含'\0'
char ch[]="hello";
int s=strlen(ch);
printf("%d\n",s);//輸出結果爲:5
 
  6)實現單詞首字母大寫,並統計單詞個數
      a、使用gets()函數從鍵盤輸入一個字符串,判斷輸入的有多少個單詞?
         思路:   
①輸入
②接收字符串並保存到數組中
③循環取出每一個字符  遇到'\0'循環結束
④判斷是否爲單詞
⑤當前循環的字符是空格,則下次循環一定是個單詞
     代碼實現:
 void main(){
char str[1000];
int words=0;//這是一個標記,標記是否爲空格
int count=0;//統計單詞的個數
printf("請輸入一個字符串:\n");
gets(str);
for(int i=0;str[i]!='\0';i++){
if(str[i]==' '){
words=0;//標記爲0表示這是一個單詞
}else if(words==0){
count++;
str[i]=str[i]-32;//通過-32將其變成大寫
words=1;
}
}
puts(str);
printf("字符串的個數是:%d,字符串:%s\n",count,str);
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章