www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]字符串方面的只是,用C語言自己已經(jīng)處理了很多了,有點(diǎn)經(jīng)驗(yàn)了,但是還是有一些新的內(nèi)容,值得關(guān)注,比如這里學(xué)習(xí)發(fā)現(xiàn)的qsort,和bsearch函數(shù),以前不曾用過。常用的輸入輸出控制方式?1、數(shù)據(jù)量不定w

字符串方面的只是,用C語言自己已經(jīng)處理了很多了,有點(diǎn)經(jīng)驗(yàn)了,但是還是有一些新的內(nèi)容,值得關(guān)注,比如這里學(xué)習(xí)發(fā)現(xiàn)的qsort,和bsearch函數(shù),以前不曾用過。

常用的輸入輸出控制方式?

1、數(shù)據(jù)量不定while(scanf(“%d”,&n) != EOF)
2、先給數(shù)據(jù)量scanf(“%d”,&n); while (n--){}
3、以某數(shù)值或符號(hào)結(jié)束
? ? ? while(scanf(“%d”,&n),n)
1、直接輸出數(shù)據(jù)然后換行
2、每組數(shù)據(jù)后follow一個(gè)空行
3、每?jī)山M數(shù)據(jù)之間between一個(gè)空行

對(duì)于字符串輸入的處理: C語法:
char buf[20];?
gets(buf);?
C++語法:
如果用string buf;來保存:
getline( cin , buf );?
如果用char buf[ 255 ]; 來保存:
? ? ? ? cin.getline( buf, 255 );


scanf(“ %s%s”,str1,str2),在多個(gè)字符串之間用一個(gè)或多個(gè)空格分隔;
若使用gets函數(shù),應(yīng)為gets(str1); gets(str2); 字符串之間用回車符作分隔。
通常情況下,接受短字符用scanf函數(shù),接受長(zhǎng)字符用gets函數(shù)。
而getchar函數(shù)每次只接受一個(gè)字符,經(jīng)常c=getchar()這樣來使用。


getchar():讀入一個(gè)字符
? whlie((ch=getchar())!=EOF) ? {
? ? ?
? }
? gets():讀入一行
? while(gets(buf)!=NULL) {
?
? }
案例分析

int?MyStrchr(char?*?s,??char?c)???//看s中是否包含?c
{
	for(?int?i?=?0;?i?<?strlen(s)?-1?;?i?++?)
		if(?s[i]?==??c)
			return?1;
	return?0;
}??哪里不好?這個(gè)函數(shù)執(zhí)行時(shí)間和?s?的長(zhǎng)度是什么關(guān)系?


?strlen?是一個(gè)o(N)的函數(shù),每次判斷?i?<?strlen(s)?–?1?都要執(zhí)行,太浪費(fèi)時(shí)間了



字符串內(nèi)元素查找

#include#include/**
char?*strstr(char?*s1,?char?*s2);

Scans?a?string?for?the?occurrence?of?a?given?substring.
查找給定字符串在字符串中第一次出現(xiàn)的位置,返回位置指針
strstr?scans?s1?for?the?first?occurrence?of?the?substring?s2.

Return?Value

strstr?returns?a?pointer?to?the?element?in?s1,?where?s2?begins?(points?to?s2?in?s1).?If?s2?does?not?occur?in?s1,?strstr?returns?null.

如果找到,返回指針,指向s1中第一次出現(xiàn)s2的位置
如果找不到,返回?NULL

類似的還有查找一個(gè)字符出現(xiàn)的位置strchr

*/
char?str[]?=????"lazy";
char?string[]?=?"The?quick?brown?dog?jumps?over?the?lazy?fox";
int?main(?void?)
{
???char?*pdest;
???int??result;
???pdest?=?strstr(?string,?str?);
???result?=?pdest?-?string?+?1;
???if(?pdest?!=?NULL?)
??????printf(?"%s?found?at?position?%dnn",?str,?result?);
???else
??????printf(?"%s?not?foundn",?str?);
}

單詞排序 輸入若干行單詞(不含空格),請(qǐng)按字典序排序輸出。大小寫有區(qū)別。單詞一共不超過100行,每個(gè)單詞不超過20字符,并查找輸入字符串的位置

#include#include#includechar?Word[5][30];

/**
函數(shù)原型:void?qsort(void?*base,?int?nelem,?int?width,?int(*fcmp)(const?void?*,?const?*))
頭文件:#include是否是標(biāo)準(zhǔn)函數(shù):是
函數(shù)功能:對(duì)記錄進(jìn)行從小到大的快速排序。參數(shù)base指向存放待排序列的數(shù)組的首地址,nelem為數(shù)組中元素的個(gè)數(shù),width為每個(gè)元素的字節(jié)數(shù),int(*fcmp)(const?void?*,?const?*)為由用戶提供的比較函數(shù)。
返回值:無
*/

/**
函數(shù)原型:void?*bsearch(const?void?*key,?const?void?*base,?size_t?*nelem,?size_t?width,?int(*fcmp)(const?void?*,?const?*))
頭文件:#include是否是標(biāo)準(zhǔn)函數(shù):是
函數(shù)功能:二分法查找。參數(shù)key指向要查找的關(guān)鍵字的指針,base指向從小到大的次序存放元素的查找表,nelem指定查找表元素的個(gè)數(shù),width指定查找表中每個(gè)元素的字節(jié)數(shù),int(*fcmp)(const?void?*,?const?*)為由用戶提供的比較函數(shù)。
返回值:如果沒有找到匹配的值返回0,否則返回匹配項(xiàng)的指針。
*/
int?MyCompare(?const?void?*?e1,?const?void?*?e2?)
{
	return?strcmp(?(char?*?)?e1,?(char?*?)?e2?);
}
int?main()
{
	int?n?=?0;?//單詞個(gè)數(shù)
	char?obj[20];
	char?*search;
	while(scanf("%s",Word[n])?!=?EOF?&&?Word[n][0])
		n?++;
	qsort(Word,?n,sizeof(Word[0]),MyCompare);
	int?i;
	for(i?=?0;?i?<?n;?i?++?)
		printf("%sn",Word[i]);?//?‘n’表示換行
????printf("排序完成,輸入要查找的單詞n");
????gets(obj);
????search=(char*)bsearch(obj,Word,5,sizeof(Word[0]),MyCompare);
????if(search)
????{
????????printf("所查找的位置為:%d",(search-Word[0])/30+1);
????}
	return?0;
}

字串判斷 判斷s里面的元素是不是都能在t里面找到

#includechar?s[100010];
char?t[100010];
int?main(){
	int?i,j;
	while?(scanf(?"%s%s",s,t)?>?0?)?{
?		i?=?0;
		for(j?=?0?;?s[i]?&&?t[j];?j?++?)????????{
			if(?t[j]?==?s[i]?)??i?++;
		}
		if?(?s[i]?==?0)??//?‘