字符型數據以及字符串的輸入與輸出和函數


空白符:空格,回車,制表符等等。
1、字符型數據(單個數據的輸入)。
(1)scanf輸入, 遇到回車,空格,tab鍵會記錄進去,使得一個字符的內容變為空格這類的字符,
eg:輸入格式:5
                        M
解決方法:
(1)getchar();處理一個字符。%*c賦值抑制符,跳過一個字符,讀入但不存儲。
      
 scanf("%d",&n);
 getchar();
 scanf("%c",&M);
 
(2)跳過多個空白字符在格式傳中的 %c之前加上空格或者在%d之后加上空格
      
 scanf("%d",&n);                    scanf("%d ",&n);                
 scanf(" %c",&M);                   scanf("%c",&M); 
 
2、字符數組與字符串
通常 用一個字符數組來存儲一個字符串。字符串和普通字符數組的區別在於字符串末尾有一個空字符'\0'. 空字符不計入字符串有效字符,也不計入總長度
字符串的循環遍歷條件: s【i】!=‘\0’
字符串的輸入與輸出
所有的字符串操作針對的其實是字符數組,因為字符串是無法直接定義的。
char name[100];
(1)用%s整體輸入/輸出
scanf(“%s”,name);
printf(“%s”,name);
注意: 該格式讀入的數據中不能含有空白符,所有的空白符都會被當做數據結束的標志。
(2)gets()和puts()函數
gets(name);
遇到換行符或文件結束標志會結束讀入。換行符不作為讀取字符串的內容,換行符會被轉黃偉字符串結束標志‘|0’.
puts():輸出字符串並自動換行, 該函數只能輸出字符串。
printf():通過格式控制符%s輸出字符串,不能自動換行。除了字符串,printf() 還能輸出其他類型的數據。
gets和scanf的區別
1、 gets可以接收空格;而scanf遇到空格、回車和Tab鍵都會認為輸入結束,所有它不能接收空格。
例如:如果輸入為"hello world"時,上面程序的運行結果是"hello world"。而如果用scanf則只能輸出hello
2、scanf對末尾回車符的處理:把回車符保留在緩存中。gets對末尾回車符的處理:接收回車,但把回車替換為\0.
3、gets的返回值為char*型,當讀入成功時會返回輸入的字符串指針地址,出錯時返回NULL;scanf返回值為int型,返回實際成功賦值的變量個數,當遇到文件結尾標識時返回EOF。
4、gets函數僅用於讀入字符串;scanf為格式化輸出函數,可以讀入任意C語言基礎類型的變量值,而不是僅限於字符串(char*)類型。
 
3、常用字符串函數
(1)string.h頭文件中:
strlen(),計算長度。strlen(s)返回的就是 結束標記之前的字符個數。而s[strlen(s)]是結束標記“\0”。
 
字符串復制:
strcpy(字符數組1,字符串2)復制第二個參數中的內容到第一個參數,
strcpy(字符數組1,字符串2,n)復制第二個參數中的最多n個字符到第一個參數中。
字符串比較:
strcmp(字符串1,字符串2)比較大小,前者大返貨一個正整數,后者大返回一個負整數,相等放回0.
strncmp(s1,s2,n)將字符串1中最多n個字符與字符串2進行比較
字符串連接:
strcat(s1,s2)第二個參數的內容添加到第一個參數的有效字符后面。
strcat(s1,s2,n)第二個參數的最多n個字符添加到第一個參數的有效字符后面。
字符串 逆置:
strrev(str)
/*
* 函數名:reverseStr
* 函數功能:把字符串中的字符逆置
* 參數:需要逆置的字符串地址
*/
void reverseStr(char *str)
{
    int len;
    int i;
    char temp;
 
    len = strlen(str); // 獲取字符串長度
    
    /* 中間對折,兩邊調換 */
    for (i = 0; i < len/2; i++)
    {
        temp = str[i];
        str[i] = str[len-1-i];
        str[len-1-i] = temp;
    }
}

(2)stdio.h中的用於字符串輸入輸出的函數( ip判斷中用得非常巧,字符串類型的數據可以以其他格式存儲,且可以改變成整型存儲。整型數據也可以再存儲到字符串中)
sprintf(str,"zhang san is %d",d);
將輸出結果保存在str中而不是輸出到屏幕了。
sscanf(str,"%*6d%4d%2d%2d",&year,&month,&day);
從str字符串中讀入數據並存儲到變量中。str中存儲了某人的身份證號“410621111109092108”。
 
二維字符數組的輸入和輸出:
在輸入之前如果有整型數據的話,記住輸入過整型數據后加一個getchar(),將你下一個輸入的轉行符記錄走
eg:
while(scanf("%d%d",&n,&m),n!=0&&m!=0){
    getchar();
char str[n][LEN];//注意列長度與結果的正確性有很大關系,最好不要直接用你定義的輸入數據,可以用#define一個 for(i=0;i<n;i++){ gets(str[i]); } for(i=0;i<n;i++){ puts(str[i]); }

 

 
 
 
        


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM