天天看點

尋找兄弟字元串

如果兩個字元串的字元一樣,但是順序不一樣,被認為是兄弟字元串, 問如何在迅速比對兄弟字元串(如,bad和adb就是兄弟字元串)

#include <iostream.h>
#include<string.h>

bool Isbrother(char *str1,char *str2)
{
	if(!str1&&!str2)
		return true;
	else if(!str1||!str2)
		return false;
	else
	{
		if(strlen(str1)!=strlen(str2))
			return false;
		
		int index[128]={0};
		
		for(int i=0;i<strlen(str1);++i)
		{
			++index[str1[i]];
			--index[str2[i]];
		}

		for(i=0;i<128;++i)
			if(index[i]!=0)
				return false;
		return true;
	}
}

void main()
{
	char str1[]="ab`cd/efg",str2[]="gf/edcba`";

	if(Isbrother(str1,str2))
		cout<<"is brother"<<endl;
	else
		cout<<"not brother"<<endl;

}
           

sizeof  是求變量或類型的存儲長度。而strlen  是統計字元串中字元的個數,不包括終止符‘/0’。sizeof 是求得實體(就是"()"裡面包含的變量或者類型字)的位元組機關長度。按照類型來判斷;strlen 是求得字元的長度,累加搜尋,直到 /0截至為止。

sizeof(xxx)是個保留字,用來求配置設定給xxx的記憶體空間大小的,舉例來說sizeof(int)就是求配置設定給int型變量的記憶體大小。strlen(const char*)這是個字元串相關函數,其中,參數必須是個字元指針(指向字元串的指針)或字元串,而傳回值就是這個指針指向的字元串的長度,字元串結束必須以'/0'為标記,但'/0'不計入字元串長度。

繼續閱讀