1. 程式人生 > >zhuzhu_小妖的專欄

zhuzhu_小妖的專欄

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <assert.h>
#include <string>
using namespace std;
char substr[20];
int maxcount=0;
//一個字串是否為另一個字串的子串
char* Mystrstr( char* str, char* substr) {
	 assert(str!=NULL);
	 assert(substr!=NULL);
	for(int i=0;str[i]!='\0';i++) {
		int j=0;
		if(str[i]==substr[j]) {
			while(substr[j]!='\0' && str[i]==substr[j]){
				   i++;
				   j++;
			}
		}
		if(substr[j]=='\0') return &str[i-j];
	}
	return NULL;
}

//字串複製問題
char * Mystrcpy( char *strDest, const char *strSrc ) 
  {    
	assert( (strDest != NULL) && (strSrc != NULL) );    
	char *address = strDest;      
	while( (*strDest++ = *strSrc++) != '\0' );      
	return address;  
}

//從大到小取子串問題
void subString(char *str){
	int len = strlen(str);
	char *tmp = (char*)malloc(len);
	for(int i=len;i>0;i--) {
		for(int j=0;j+i<=len;j++){
			strncpy(tmp,str+j,i);      
			tmp[i]='\0';      //一定要寫
			cout<<tmp<<endl;
		}
	}
}

//字串中連續出現次數最多的子串
void MostContSustr(char *str) {
	int len = strlen(str);
	int maxcount = 1;
	for(int i=0;i<len;i++) 
	{
		for(int j=i+1;j<len;j++) 
		{
			int n = j-i,cnt=1;
			if(strncmp(str+i,str+j,n)==0)
			{
				cnt++;
				for(int k=j+n;k<len;k+=n)
				{
				if(strncmp(str+i,str+k,n)==0)
					{
						cnt++;
					}else break;
				}
				if(cnt>maxcount) {
					maxcount = cnt;
					strncpy(substr,str+i,n);
					substr[n] = '\0';
				}
			}
		}
	}
}

//從指定字串中去掉規定的字元
char* remove(char *s ,char ch) {
	int len = strlen(s);
	char *tmp = (char*)malloc(len);
	int j=0;
	for(int i=0;s[i]!='\0';i++) {
		if(s[i]!=ch) {
			tmp[j++] = s[i];
		}
	}
	tmp[j] = '\0';
	return tmp;
}

//出現相同且長度最長的子串
int  longSubString() {
	char *s = (char*)malloc(100);
	gets(s);
	int len=strlen(s);
	char *sub = (char*)malloc(100);
	//char sub[100] = {'\0'};
	for(int i=len;i>0;i--) 
	{   
		for(int j=0;j+i<=len;j++) 
		{
			strncpy(sub,s+j,i);
			sub[i]='\0';
			if(strstr(s+j+1,sub)!=NULL) {   //strstr 這個函式有什麼意思的呢   substr這個函式又是什麼意思呢 
				cout<<"出現相同且最長的字串為:"<<sub<<endl;
				cout<<"首字元的位置是:"<<j+1<<endl;
				return 1;
			}
		}
	}
	return 0;
}
//單詞倒置
void WordsReverse() {
	 char str[100];
	 gets(str);
	 int len = strlen(str);
	 int i,j;
	 for(i=0,j=len-1;i<j;i++,j--) {
		char tmp = str[i];
		str[i] = str[j];
		str[j] = tmp;
	 }
	 printf("%s\n",str);
	 i = 0;
	 while(str[i]) {
		 int begin=0,end=0;
		 if(str[i]!=' ') {
			begin = i;
			while(str[i]&&str[i]!=' ') { i++;}
			i = i-1;
			end = i;
		 }
		 while(begin<end) {
			char tmp = str[begin];
			str[begin] = str[end];
			str[end] = tmp;
			begin++;
			end--;
		 }
		 i++;
	 }
		 printf("%s",str);
}
//轉換字串格式為字串裡的字元+該字元連續出現的個數
char *ReverseStrForm(char* str) {
	int count=1,k=0;
	char *reschar = (char*)malloc(20);
	int len = strlen(str);
	for(int i=0;i<len;i++) {
		if(str[i+1] == str[i]) {
			count++;
		}else {
			reschar[k++]=str[i];
			char c = count+'0';  //加'0'是將之轉換為字串的呢
			reschar[k++] = c;
			count=1;
		}
	}
	reschar[k] = '\0';
	return &reschar[0];
	
}

/*
int main() {
	char *s1 = "hello world";
	char *s2 = "world";
    char *s = Mystrstr(s1,s2);
	char str[10]={'\0'};
	char *ss = (char*)malloc(80);
//	strncpy(ss,s1,4);
//	cout<<ss<<endl;
//	gets(str);
//	puts(str);
//	subString("abcde");
//	MostContSustr("abcdededefgh");
//	char *p = remove(s1,'o');
//	cout<<p<<endl;
//	longSubString();
//	WordsReverse();
	s2 = ReverseStrForm("aaddeefffsse");
	cout<<s2;
	return 0;
}
*/
//#include "stdafx.h"
#include <stdio.h>
#include <iostream>

void Swap(int &x,int &y) {
	int temp = x;
	x = y;
	y = temp;
}

//選擇排序
void SelectSort(int A[],int n) {
	for(int i=0;i<n-1;i++) {
		for(int j=i+1;j<n;j++) {
			if(A[i]<A[j]) Swap(A[i],A[j]);
		}
	}
}

//將一個無序的陣列進行從大到小排序  對應的下標也排序
void SortWithIndex(int array[],int n,int index[]) {
	for(int i=0;i<n-1;i++) {
		for(int j=i+1;j<n;j++) {
			if(array[i]>array[j]) {
				int tmp = array[i];
				array[i] = array[j];
				array[j] = tmp;
				int tmp2 = index[i];
				index[i] = index[j];
				index[j] = tmp2;
			}
		}
	}
}

//插入排序
void InsertSort(int A[],int n) {
	for(int i=1;i<n;i++) {
		int tmp = A[i];
		int j = i;
		while(j>0 && tmp<A[j-1]) {
			A[j] = A[j-1];
			j--;
		}
	A[j] = tmp;
	}
}

//插入排序2
void InsertSort2(int A[],int n) {
	for(int i=1;i<n;i++) {
		int tmp = A[i];
		int j = i-1;
		while(j>=0 && tmp<A[j]) {
			A[j+1] = A[j];
			j--;
		}
	A[j+1] = tmp;
	}
}

//氣泡排序 
void BubbleSort(int A[],int n) {
	for(int i=n-1;i>0;i--) {
		for(int j=0;j<i;j++) {
			if(A[j]>A[j+1])
				Swap(A[j],A[j+1]);
		}
	}
}
//氣泡排序2
void BubbleSort2(int A[],int n) {
	for(int i=0;i<n-1;i++) {
		for(int j=0;j<n-i;j++) {
			if(A[j]>A[j+1])
				Swap(A[j],A[j+1]);
		}
	}
}
//快速排序 
void QuickSort(int A[],int left,int right) {
	int i,j;
	if(left<right) {
		i = left,j = right+1;
		do{
			do {i++;}while(A[i]<A[left]);
			do {j--;}while(A[j]>A[left]);
		if(i<j) Swap(A[i],A[j]);
		}while(i<j);
		Swap(A[left],A[j]);
		QuickSort(A,left,j-1);
		QuickSort(A,j+1,right);
	}
}
//希爾排序
void ShellSort(int A[], int n) {
	int h = 1;
	while(h<=n/3) h = 3*h+1;
	while(h>0) {
		for(int i=h;i<n;i++) {
			int j = i,tmp = A[i];
			while(j>h-1 && A[j-h]>tmp) {
				A[j] = A[j-h];
				j-=h;
			}
			A[j] = tmp;
		}
		h = (h-1)/3;
	}
}

void Merging(int A[],int Temp[],int i1,int j1,int i2,int j2,int &k) {
	int i=i1,j=i2;
	while(i<j1 && j<j2) {
		if(A[i]<A[j]) Temp[k++] = A[i++];
		else Temp[k++] = A[j++];
	}
	while(i<=j1) Temp[k++] = A[i++];
	while(j<=j2) Temp[k++] = A[j++];
}
//二路合併排序
void MergeSort2(int A[],int n) {
	int *Temp = (int *)malloc(n);
	int i1,j1,i2,j2,k,size=1;
	while(size<n) {
		i1=0;k=0;
		while(i1+size<n) {
			i2=i1+size;j1=i2-1;
			if(i2+size-1>n-1) j2=n-1;
			else j2=i2+size-1;
			Merging(A,Temp,i1,j1,i2,j2,k);
			i1 = j2+1;
		}
		for(int i=0;i<k;i++) A[i]=Temp[i];
		size*=2;
	}
}

/*
int main() {
	int arr[10] = {2,4,1,6,9,7,2,6,0,5};
	SelectSort(arr,10);
	int i;

	printf("選擇排序");
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}
	/*
	printf("\n插入排序");
	InsertSort(arr,10);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}
	printf("\n插入排序2");
	InsertSort2(arr,10);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}

	printf("\n氣泡排序");
	BubbleSort(arr,10);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}

	printf("\n氣泡排序2");
	BubbleSort2(arr,10);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}

	/*
	printf("\n快速排序");
	QuickSort(arr,0,9);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}
	printf("\n希爾排序");
	ShellSort(arr,10);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}
	printf("\n二路合併排序");
	MergeSort2(arr,10);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}
	

	
	printf("\n測試一下下啊");
	test(arr,10);
	for( i=0;i<10;i++) {
	printf("  %d",arr[i]);
	}
	*/
	
	return 0;
}

相關推薦

zhuzhu_專欄

#include "stdafx.h" #include <stdio.h> #include <iostream> #include <assert.h> #include <string> using namespace

hrbust華為杯———G真假

div lag col sam put rip sample problem rdquo 1、鏈接: http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2344

【python課堂專欄】python課堂06 - 基本資料型別字串運算篇

python小課堂06 - 基本資料型別字串運算篇 字串的運算 就題目而言,字串的運算?乍一看!這是什麼鬼?所謂的運算,數學定義的含義就是將數字之間進行各種演算法,例如加減乘除。那麼字串運算呢?同理:就是將字串進行所謂的“加減乘除! 當然如果在字串中獲取相關對應的字元,也算是

【python課堂專欄】python課堂05 - 基本資料型別字串篇(重要)

python小課堂05 - 基本資料型別字串篇(重要) 什麼是字串? 題西林壁 作者:蘇軾 橫看成嶺側成峰,遠近高低各不同。 不識廬山真面目,只緣身在此山中。 如上面的詩詞一樣,將其對映到我們計算機程式中,顯然不是前幾張介紹的資料型別,那麼今天就來說下程式設計中

【python課堂專欄】python課堂04 - 基本資料型別布林篇

python小課堂04 - 基本資料型別布林篇 什麼是布林型別? 布林型別:英文boolean。 舉個栗子,比如今天是愚人節!你發工資了,於是你興高采烈的去與同事探討一番,同事偷偷的告訴你,他漲工資了!然後你表示很開心,但是你意識到今天是愚人節了,於是你充滿疑問的心態去問他,

【python課堂專欄】python課堂03 - 基本資料型別進位制篇

python小課堂03 - 基本資料型別進位制篇 什麼是進位制? 來自百度: 進位制也就是進位計數制,是人為定義的帶進位的計數方法(有不帶 進位的計數方法,比如原始的結繩計數法,唱票時常用的“正”字計 數法,以及類似的tally mark計數)。

【python課堂專欄】python課堂02 - 基本資料型別數字篇

python小課堂02 - 基本資料型別數字篇 什麼是基礎資料型別 ? 在我們的日常生活中,當我們去菜市場買菜交錢的時候,會出現用數字作為計量單位來衡量一個物品值多少錢,而此時交錢的數字有零有整,比如一斤普通雞蛋的價錢是1元錢整,我們將1元錢稱之為整數;一斤普通鴨蛋的價錢是1.7

【python課堂專欄】python課堂01 - 環境安裝

python小課堂01 - 環境安裝 python 之禪 Beautiful is better than ugly. 優美勝於醜陋(Python以編寫優美的程式碼為目標) 前言 昨天介紹了Python的種種好處,今天開始進入正題,先從其自身的環境安裝講起吧…以下均為圖解

【python課堂專欄】python課堂00 - 開題篇

python小課堂00 01 THE FIRST 程式設計、程式語言? 首先,在正題了解Python開始之前,讓我們先來聊聊什麼是程式設計吧!程式設計 - 中國文字拆分開來,就是編寫程式的意思,英文 Programing。舉個例子,假如老闆給了我一個任務,要求是每天都要記錄天氣,

【python課堂專欄】python課堂16 - 函式篇

python小課堂16 - 函式篇 前言 函式篇 ------ 說起函式,大家高中應該都學過類似的概念,函式指一個量隨著另一個量的變化而變化,而在程式設計中,函式的概念則不盡相同。舉個例子,比如打過dota的同學都知道,在dota中通過shift可以對英雄進行預操作,也就是當英雄

努力奮鬥的墨魚專欄

        在描述GPU的效能的時候,我們常常用到FLOPS進行描述。FLOPS是Floating-point Operations Per Second的簡寫,即每秒所能夠進行的浮點運算數目(每秒浮點運算量). 在以往形容GPU的運算效能的時候也常常用到其他單位,比如T

【python課堂專欄】python課堂00

python小課堂00 01 THE FIRST 程式設計、程式語言? 首先,在正題了解Python開始之前,讓我們先來聊聊什麼是程式設計吧!程式設計 - 中國文字拆分開來,就是編寫程式的意思,英文 Programing。舉個例子,假如老闆給了我一個任務,要求是

【python課堂專欄】python課堂03

python小課堂03 - 基本資料型別進位制篇 什麼是進位制? 來自百度: 進位制也就是進位計數制,是人為定義的帶進位的計數方法(有不帶 進位的計數方法,比如原始的結繩計數法,唱票時常用的“正”字計 數法,以及類似的tally mar

【python課堂專欄】python課堂05

python小課堂05 - 基本資料型別字串篇(重要) 什麼是字串? 題西林壁 作者:蘇軾 橫看成嶺側成峰,遠近高低各不同。 不識廬山真面目,只緣身在此山中。 如上面的詩詞一樣,將其對映到我們計算機程式中,顯然不是前幾張介紹的資料型別,那麼今

【python課堂專欄】python課堂06

python小課堂06 - 基本資料型別字串運算篇 字串的運算 就題目而言,字串的運算?乍一看!這是什麼鬼?所謂的運算,數學定義的含義就是將數字之間進行各種演算法,例如加減乘除。那麼字串運算呢?同理:就是將字串進行所謂的“加減乘除! 當然如果在字串中獲取相關對應

【python課堂專欄】python課堂19 - 面向物件篇(二)

python小課堂19 - 面向物件篇(二) 前言 哈嘍呀Everybody,又到了更新干貨的時間了,繼續python小課堂的迴歸之路,面向物件篇的第二章,面向物件的涉及的東西實在是太多了,所以打算拆開三次寫吧,後面還有一次面向物件篇,但是打算寫完這篇之後用面向物件的設計思想來一

【python課堂專欄】python課堂18 - 面向物件篇(一)

python小課堂18 - 面向物件篇(一) 前言 又到週末了!時間過得好快啊…依稀記得公眾號剛開時,有個大學同學跟我說,介紹的太詳細了,什麼時候才能介紹到面向物件的章節啊!結果時間飛逝,2018年12月1日,距離開號正式寫文章的時間(2018年9月21號)已經過去2個多月了…

【python課堂專欄】python課堂17 - 30行程式碼破解加密ZIP檔案

python小課堂17 - 30行程式碼破解加密ZIP檔案 前言 今天來點實戰乾貨,想必之前的小課堂中一直在講基礎也會顯得非常枯燥,有了前面的相關知識,即可以實現本章內容。若有不懂得的地方,請回顧python小課堂1-16。 在多數人眼中一直覺得黑客很神祕,實際上當初我學py

【python課堂專欄】python課堂15 - 史上最詳細的包和模組import講解篇

python小課堂15 - 史上最詳細的包和模組import講解篇 前言 在大量的程式碼設計中,我們不可能將所有程式碼都寫在一個.py檔案,所以有了包、模組,而為了程式碼可以重複利用(複用性),就有了類、函式的概念。類和函式在下次介紹。 python中的包 python中

【python課堂專欄】python課堂14 - 史上最詳細安裝破解PyCharm篇

python小課堂14 - 程式碼編輯器PyCharm篇 前言 古人云:工欲善其事必先利其器!寫程式碼也一樣,雖然好多人都說,初學者不推薦使用很高大上,智慧,自動化的編輯器,但是我想說:“強大的,智慧的東西為什麼就不推薦新手用呢?!!”我自學java的時候,也直接用的是eclip