1. 程式人生 > >Linuxc基礎 九

Linuxc基礎 九

今天老師佈置了兩道題我感覺很有意思。
程式碼
壓縮字串程式碼:

int chdu(char *pStr)
{
	int len=0;
	if(pStr==NULL)
		return-1;
		while(*(pStr++))
		{
			len++;
		}
	return len;

}
void yas(char *pStr,char *pStr1)
{
	int a;
	int j=0;
	int count=0;
	int l=chdu(pStr);
	int i;
	a=pStr[0];
	for(i=0;i<l;i++)
	{
		
		if(pStr[i]==a)
		{
			count++;
		}
		else
		{
			if(count==1)
			{
				pStr1[j++]=a;	
			}
			else
			{
				pStr1[j++]=count+'0';
				pStr1[j++]=a;
			}
			count=1;
			a=pStr[i];
		}
	
	}
	if(a!=pStr[j-1])
	{
		if(count==1)
		{
			pStr1[j++]=a;	
		}
		else
		{
			pStr1[j++]=count+'0';
			pStr1[j++]=a;
		}
	
	}
	pStr[j++]='\0';

}
int main3()
{
	char str[100]="aaaabbbbcdfggg";
	char str1[200];
	int len=chdu(str);
	yas(str,str1);
	printf("%s\n",str1);

單詞逆序程式碼:

#include <stdio.h>
#include <string.h>
void change(char *p1, char* p2)     
{
    char tmp;
    while (p1 < p2)
    {
        tmp = *p1;
        *(p1++) = *(p2);
        *(p2--) = tmp;
    }
}
void diandao(char *pStr)
{
	char* p1 = pStr;    
    char* p2 = pStr + strlen(pStr) - 1;
    char* p3 = NULL;

    change(p1, p2);      
    p2 = pStr;           

    while (*p2)          
    {
        if (' ' == *p2)  
        {
            p3 = p2 - 1;
            change(p1, p3);
            p1 = p2 + 1;  
        }
        p2++;        
    }

    if (0 == *p2)         
    {
        p3 = p2 - 1;
        change(p1, p3);
    }
    puts(pStr);   

}
int main()
{
    char str[] = {" You are  from  shanghai"};
    diandao(str);
	
	
    return 0;
}

總結
這兩個程式我想了半天猜想的到之前也結合了網上的一些人的想法才寫出這個程式。這兩個程式也讓我知道了看題目要有不同的想法只有這樣才能更好寫出程式。