如何入手ACM(新手高階篇)

前言

基本上所有基礎的內容都交給你了,就剩下一個字符串沒講了。

在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))

這個是將數組初始化,什麼類型的數組都可以,在函數中聲明的局部變量的初始值並不爲零。需要初始化。

目前就這麼多。

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