前言
基本上所有基礎的內容都交給你了,就剩下一個字符串沒講了。
在c語言中是沒有字符串這個東西的,我們只能用字符數組來存儲一個字符串。
但是在c++中我們可以直接定義一個字符串類型的變量,這兩個是不同的。本章主要講字符數組。
字符的輸入與輸出
c語言寫法
#include <cstido>
#include <cstring>
char x;
char a[100];
int main()
{
int i;
//字符變量,需要加取址符&
scanf("%c",&x);
printf("%c",x);
//字符串不需要加取址符
scanf("%s",a);
printf("%s",a);
return 0;
}
c++寫法:
#include <iostream>//頭文件不一樣
#include <cstring>
using namespace std;
char a[100];
char x;
int main()
{
cin>>x;
cout<<x;
cin>>a;
cout<<a;
return 0;
}
c++的輸入輸出簡單粗暴,連變量類型也不要輸入。但是暫時不推薦用。
注意:字符數組中字符串的輸入都是從第零位開始的。
順便說下:一個字符佔一個字節,一個INT佔四個字節,其他的可以自己查查。
例題
現在我們通過題目來了解一下字符數組的遍歷。注意這裏面有很多知識點的。
題目鏈接:https://www.luogu.com.cn/problem/P1055
題目很簡單,將所有的數字加起來(除最後一個數字)對11取模後與最後一位進行對比。符合條件就是right,否則輸出正確的號碼
#include <cstdio>
#include <cstring>
char str[100];
int ans = 0;
int sit = 1;
int main()
{
int i;
scanf("%s",str);
//strlen(str)會返回字符串str的長度
//這裏爲什麼要減2呢?因爲最後兩個字符是不需要參與運算的,少循環一次是一次
for(i=0;i<strlen(str)-2;i++)
{
//論數字字符如何轉化成整型數字
if(str[i] - '0' >=0 && str[i] - '0' <= 9)//是數字的話
{
ans += (str[i] - '0') * sit;
sit++;
}
}
if(ans % 11 == str[strlen(str)-1] - '0' )printf("Right");
else if(ans % 11 ==10 && str[strlen(str)-1] == 'X')printf("Right");
else
{
for(i=0;i<strlen(str)-1;i++)printf("%c",str[i]);
if(ans % 11 != 10)printf("%d",ans%11);
else printf("X");//各種細節
}
return 0;
}
再次再總結一下幾個常用的函數(好像需要cstring庫)
strcmp(str1,str2)/strncmp(str1,str2,n)
這個函數是用來比較兩個字符串是否相等的,如果相等那麼其值爲0
如果str1<str2會返回負數;str1>str2,則返回正數。
字符串大小的比較是根據字典序來的。“a”<“b” “aa”<“ab”<“bb”
這個strncmp是將str1和str2的前n個字符進行比較。
strcpy(str1,str2)/strncpy(str1,str2,n)
這個是用來複制函數的,它會將str2的值賦給str1中。strncpy講str2前n個字符複製給str1。
strcat(str1,str2)/strncat(str1,str2,n)
將你可以理解爲str1 = str1+str2 但是不能這樣寫。
memset(str,0,sizeof(str))
這個是將數組初始化,什麼類型的數組都可以,在函數中聲明的局部變量的初始值並不爲零。需要初始化。
目前就這麼多。