#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;
}
华为机试题
最新推荐文章于 2021-02-22 22:47:17 发布