1. 程式人生 > >好久沒寫過部落格,寫一道今天的筆試題

好久沒寫過部落格,寫一道今天的筆試題

要求從str1字串中找出str2字串最後一次出現的位置,最簡單應該是從後往前找,當時估計有點緊張沒多想,結果可想而知,回來自己寫了兩種實現,從後往前和從前往後,前者簡單就不貼程式碼了,後者突發奇想用了我最不擅長的遞迴來實現的,略微複雜,可讀性較差,不過還是給寫出來了,功能還算完善,支援類似ababa,中找aba,aabc中找ab,abcde中找de,後兩種其實還算簡單,考慮到就行,遞迴就是為第一種情況服務的...

#include <stdio.h>

int mystr(char *str1, char *str2)
{
	int i=0,j=0,tmp=0,ok = -1;
	if(str1 == NULL || str2 == NULL)
		return -1;
	for(i=0,j=0; str1[i] != '\0'; i++)
	{
		if(str1[i] == str2[j])
		{
			if(j == 0)
				tmp = i;
			else
			{
				if(str2[j+1] == '\0')
					ok = tmp;
				if(str2[j] == str2[0])
				{
					tmp = mystr(&str1[i], str2);
					if(tmp == -1)
						break;
					else
					{
						ok = i+tmp;
						break;
					}
				}
			}
			j++;
			if(str2[j] == '\0')
			{
				ok = tmp;
				j = 0;
			}
		}
		else
		{
			if(j != 0)
				i = i - j;
			j = 0;
		}
	}
	return ok;
}

void main(void)
{
	int i;
	char *c = NULL;
	char *d = NULL;
	char a[20] = {"ababsababababa"};
	char b[6] =   {"aba"};
	
	i = mystr(a, b);
	printf("%d\n", i);
}
歡迎交流.

本文原創,轉載請註明出處,謝謝!