c基礎(二)輸入輸出與字符串操作函數

1.取隨機數         2.scanf與printf        二.printf格式化輸出

3. gets  puts   標準讀寫                          4.fgets   fputs   文件讀取寫入        

5.strlen  字符串長度                               6.strcpy,  strncpy 字符串拷貝 7.strcat ,strncat 字符串拼接              

8.strcmp, strncmp字符串比較  (Ascll大小)         9.sprint  sscanf                    10.strchr  strstr                     

11.strtok                 12.atoi  ,atol ,  atof

1.取隨機數

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>

int main(void) {
	srand((unsigned int)time(NULL));     //設置隨機數種子爲時間,
	for (int i = 0; i <10; i++)
	{
		printf("%d\n", rand() % 11 + 90);   //取90-100得隨機數
	}
	return 0;
}

   取模 10  表示 0-9之間的數 ,    取模100表示0-90之間的數        取模11表示0-10之間的數        rand() % 11 + 90);    表示 90-100

2.scanf與printf

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>

int main(void) {

	printf("請輸入:_________");
	char str[100];
	scanf("%[^\t]",str);        // 正則表達式通配符,只有接受到換行才作爲結束符
	printf("%s", str);
	int a=0;

	scanf("%d", &a);          //輸入是一個數必須加上&取地址
	printf("%d\n", a);
	  
	return 0;
}

    1.   scanf("%[^\t]",str);    表示輸入以  製表符結束, 將接受到的字符存入 字符數組str

    2.  scanf("%d", &a);       默認以空格結束符,   輸入數字時  必須加上&取地址,否則報錯 

 2.scanf 接受時,必須按照格式接受,          如果沒有格式空格和回車可作爲默認分隔符  

3. %1d   %2s   接受一位數   與兩位字符串

 4.%*d%s    表示只接受字符串而忽律數字       %*[1-9]%s   表示屏蔽數字1-9 

  字符串默認 是以   '\0'   結尾   如下長度爲4

二.printf格式化輸出

  1.  printf("%.2f", 3.1425);   保留兩位小數             2.printf("%3d",12 );   右對齊輸出 不夠左邊空格補齊  超出正常輸出

  3. printf("%05d \n",123 );    右對齊輸出 不夠左邊用0補齊  超出正常輸出     4. printf("%5s \n", "abc"); 與%d用法一致

  5.printf(" %.2s \n", "abc");   截取2位字符串      6.printf("%-5d ", 123);  左對齊

3. gets  puts   標準讀寫

  1.接受一個字符串  :gets(str)  允許輸入的字符串可以有空格  ,直到接受到回車或者字符串結束標誌才結束(不安全)

  2. 輸出一個字符串 :puts   默認輸出結束時自帶輸出一個換行       返回值   0成功    -1失敗

4.fgets   fputs   文件讀取寫入

  1. fgets(  char* _Buffer,  int   _MaxCount,  FILE* _Stream);

        如果輸入的大小 小於原始指針對應區域大小,會在字符串輸入完成時自動加上 \n\0 ,相當於輸入完成時按下的回車

        如果輸入的大小 小於等於原始指針對應的區域大小會自動加上   \0 ,而不會再加上\n,因爲已經滿了

 

 2. fputs  (   char const* _Buffer,   _Inout_ FILE*  _Stream);     fputs是puts的文件操作版,但fputs不會自動輸出一個   '\n'

     輸出以   '\0'爲結尾

5.strlen  字符串長度

  1.strlen 得出有效字符串的個數,標誌是以  '\n'  爲結尾   只能處理字符串,不能處理字符數組 

6.strcpy,  strncpy 字符串拷貝

  1.strcpy  拷貝字符串    參數 :   目標字符串,   源字符串           拷貝源的  \0  與 空格         成功返回地址,失敗返回NULL

int main(void) {
	char arr1[] = "123";
	char arr2[4];
	strcpy(arr1, arr1);
	puts(arr1);    123    }

 2. strncpy  拷貝指定字符串個數    參數 :   目標字符串,   源字符串  , 拷貝個數      strncpy 不拷貝源數據的  \0  所以拷貝出現亂碼

 

7.strcat ,strncat 字符串拼接

        char arr1[8] = "123";
	char arr2[] = "456";
	strcat(arr1, arr2);

  1. strcat(arr1, arr2);  把arr2追加到 arr1   所有注意arra1的數組越界異常        2. strncat   指定追加個數    3.strcat(arr1,"隨意加");

    追加自動拷貝  '\0'

8.strcmp, strncmp字符串比較  (Ascll大小)

        char arr1[8] = "hello\0dad";
	char arr2[] = "hello\0sdhdgfh";
	int rest = strcmp(arr1, arr2);
	printf("%d\n", rest);   0

   比較的是 \0 以前的有效 字符             strncmp比較指定位數的字符串 Ascll碼值         (有效字符串)

9.sprint  sscanf

int main(void) {
	int a = 123;
	char arr[] = "abc";
	char dest[100];
	sprintf(dest, "%s %d", arr, a);
	printf("%s \n", dest);        abc 123

	int b;
	char arr2[10];
	sscanf(dest, "%s %d", arr2, &b);
	printf("%s", arr2);
	printf("%d", b);             abc123
	return 0;
}

  1. sprint 將多個字符串按照自定義格式   放入另一個新的字符串中         

  2.sscanf  按照自定義格式將一個字符串拆分爲多個整數或字符串

10.strchr  strstr

int main(void) {
	char arr[] = "eeeall哈o";
	char arr2 = 'l';
	char arr3[] = "ee";

	printf("%s \n", strchr(arr, arr2));   //ll哈o

	printf("%s \n", strchr(arr, 97));     //all哈o
	
	printf("%s \n", strstr(arr, arr3));   //eeeall哈o

	printf("%s", strstr(arr, "哈"));        //哈o
	return 0;    
}


   1. strchr  尋找與一個字符   相同的開頭的字符串(原理 比較Ascll相同)  

   2. strstr  尋找與字符串   相同的開頭的字符串(原理 比較Ascll相同)     strstr可以尋找漢字    而strchr不行  一個漢字兩個字節

11.strtok

int main(void) {
	char arr[] = "www.csdn.com";
	char* p = strtok(arr, ".");
	while (p != NULL) {
		printf("%s \n", p);          www   csdn com

		p = strtok(NULL, ".");
	}
	return 0;
}

    1.第二次切割寫NULL           原理是將切割點換成   '\0'    列如. 

12.atoi  ,atol ,  atof

int main(void) {
	char arr[] = "    100";
	int a= atoi(arr);
	printf("%d \n", a);

	char arr2[] = " 1005";
	int b = atol(arr2);
	printf("%d \n", b);
	
	char arr3[] = "3.142665";
	float c = atof(arr3);
	printf("%f \n", c);
	
	return 0;
}

   1.atoi  跳過前面空格  將字符串轉換爲整形        2.atol   將字符串轉換爲長整形      3.atof   將字符串轉換爲浮點型double也可以

     4.1000dasdasda   可以轉換     dada100不能轉換

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章