一、字符串相關函數
1.gets()(輸入字符串)
格式:gets(字符串);
(1)區別:gets(str)與scanf(“%s”,str)
gets(str)允許輸入的字符串含有空格
scanf(“%s”,str)不允許含有空格
注意:由于以上無法知道字符串大小,很容易導致字符數組越界
2.fgets()(輸入字符串)
格式:fgets(char *s, int size, FILE *stream)
s:字符串;
size:指定最大讀取字符的長度(size-1)
stream:文件指針,如果讀鍵盤輸入的字符串,固定寫為stdin
結尾自帶"\n".不用擔心越界問題
3.puts()(字符串輸出)
格式:puts(字符串)
在輸出后自動輸出一個“\n”
4.fputs()(字符串輸出)
格式:fputs(constchar * str, FILE * stream)
s:字符串
stream:文件指針,如果讀鍵盤輸入的字符串,固定寫為stdin
注意:fputs()是puts()的文件操作版本,但fputs()不會自動輸出一個'\n'
5.srelen()(計算指定字符串大小)
格式:strlen(const char *s);
s:字符串首地址
6.strcpy()(把src所指向的字符串復制到dest所指向的空間中,'\0'也會拷貝過去)
格式strcpy(dest, src)
dest:目的字符串首地址
?????? src:源字符首地址
連接后:
注意:如果參數dest所指的內存空間不夠大,可能會造成緩沖溢出的錯誤情況。
7.strncpy()
功能:把src指向字符串的前n個字符復制到dest所指向的空間中,是否拷貝結束符
看指定的長度是否包含'\0'。
格式:strncpy(dest, src, size_t n)
dest:目的字符串首地址
?????? src:源字符首地址
?????? n:指定需要拷貝字符串個數
8.strcat()
功能:將src字符串連接到dest的尾部,‘\0’也會追加過去
格式:strcat(dest, src)
dest:目的字符串首地址
?????? src:源字符首地址
9.strncat()
功能:將src字符串前n個字符連接到dest的尾部,‘\0’也會追加過去
格式:strncat(dest, src, size_t n)
dest:目的字符串首地址
?????? src:源字符首地址
?????? n:指定需要追加字符串個數
10.strcmp()
功能:比較 s1 和 s2 的大小,比較的是字符ASCII碼大小
格式:strcmp(s1,s2)
s1:字符串1首地址
?????? s2:字符串2首地址
11.strncmp()
功能:strcmp的追加,比較前n個大小的字符大小,比較的是字符ASCII碼大小
格式:strncmp(s1,s2,n)
?
s1:字符串1首地址
?????? s2:字符串2首地址
?????? n:指定比較字符串的數量
?
12.sprintf()
功能:格式化數據,然后將結果輸出到str指定的空間中,直到出現字符串結束符 '\0'? 為止
格式:sprintf(str, format, ...)
str:字符串首地址
?????? format:字符串格式,用法和printf()一樣
13.sscanf()
功能:從str指定的字符串讀取數據,并根據參數format字符串來轉換并格式化數據
格式:sscnf(str,?format, ...)
str:指定的字符串首地址
?????? format:字符串格式,用法和scanf()一樣
14.strchr()
功能:在字符串s中查找字母c出現的位置
格式:strchr(s, int c)
s:字符串首地址
?????? c:匹配字母(字符)
15.strstr()
功能:查找在字符串riunv中找llunk出現的位置
格式:strstr(riunv,link)
16.strtok()
功能:來將字符串分割成一個個片段。當strtok()在參數s的字符串中發現
參數delim中包含的分割字符時, 則會將該字符改為\0 字符,當連續
? ? 出現多個時只替換第一個為\0。
格式:strtok(str, delim)
str:指向欲分割的字符串
?????? delim:為分割字符串中包含的所有字符
注意: 在第一次調用時:strtok()必需給予參數s字符串
往后的調用則將參數s設置成NULL,每次調用成功則返回指向被分割出片段的指針
17.atoi()
功能:atoi()會掃描nptr字符串,跳過前面的空格字符,
直到遇到數字或正負號才開始做轉換,而遇到
非數字或字符串結束符('\0')才結束轉換,并將結果返回返回值。
格式:atoi(nptr);
? ??nptr:待轉換的字符串
拓展(與atoi類似的)
1.atof():把一個小數形式的字符串轉化為一個浮點數。
2.atol():將一個字符串轉化為long類型
一、函數
1.函數的定義
返回類型 函數名(形式參數列表)
?????? {
?????? ?????? 數據定義部分;
?????? ?????? 執行語句部分;
}
2.函數名
可以隨意取,但最好見名知意
注意:函數名的后面有個圓換號(),代表這個為函數,不是普通的變量名。
3.形參列表
在定義函數時指定的形參,在未出現函數調用時,它們并不占內存中的存儲單元,因此稱它們是形式參數或虛擬參數,簡稱形參,表示它們并不是實際存在的數據,所以,形參里的變量不能賦值。
定義:類型+變量的形式
4.函數體
函數功能實現的過程
5.返回值
函數的返回值是通過函數中的return語句獲得
注意:如果函數返回的類型和return語句中表達式的值必須一致,程序則會報錯。
課后作業
思考任務(課后練習)
?
1、設計一個計算器,可以進行加、減、乘、除運算,類型全部都是int即可
??????? 要求從鍵盤輸入指令及操作數,如:
??????? add 15 25??????? //計算15+25的值,并返回結果
??????? sub 25 15??????? //計算25-15的值,并返回結果
??????? mux 3 5?????????? //計算 3*5的值, 并返回結果
??????? dive 25 5 ?????? //計算25/5的值,并返回結果
?
提示:1) 需要封裝函數
??????? ? 2) scanf("%s %d %d", name, a, b);
?
2、不用使用庫函數,編寫一個函數my_strcmp(),功能和strcmp()一樣,實現字符串大小比較:
int my_strcmp(char s1[], char s2[]);
int main()
{
??????? char s1[] = "hello world";
??????? char s2[] = "hello abc";
??????? int flag = my_strcmp(s1, s2);
??????? if(flag == 0)
??????? {
??????????????? printf("%s 等于 %s\n", s1, s2);
? ? ? ? }
??????? else if(flag > 0)
??????? {
??????????????? printf("%s 大于 %s\n", s1, s2);
??????? }
??????? else
??????? {
??????????????? printf("%s 小于 %s\n", s1, s2);
? ? ? ? }
??????? return 0;
}
?
?
?
答案
1.
#include<stdio.h>
#include<string.h>
int main()
{
int a=0,b=0;
char name[5];
char s2[5]="add";
char s3[5] = "sub";
char s4[5] = "mux";
char s5[5] = "dive";
printf("請輸入加add,減sub,乘mux,除dive\n");
gets(name);
printf("請輸入兩個數:\n");
scanf("%d %d", &a, &b);
if (strcmp(name, s2) == 0)
{
printf("%d", a + b);
}
else
if (strcmp(name, s3) == 0)
{
printf("%d", a - b);
}
else
if (strcmp(name, s4) == 0)
{
printf("%d", a*b);
}
else
if (strcmp(name, s5) == 0)
{
printf("%d", a/b);
}
else
{
printf("輸入出錯");
}
return 0;
}
?
2.
#include<stdio.h>
#include<string.h>
int my_strcmp(char s1[], char s2[])
{
int i;
i = strcmp(s1, s2);
return i;
}
int main()
{
int flag;
char s1[] = "hello world";
char s2[] = "hello abc";
flag = my_strcmp(s1, s2);
if (flag == 0)
{
printf("%s等于%s\n", s1, s2);
}
else
if (flag > 0)
{
printf("%s大于%s\n", s1, s2);
}
else
{
printf("%s小于%s\n", s1, s2);
}
return 0;
}
?
?
?