几个简单的算法题
1、实现一个字符串查找子串的函数
#include <iostream> int search(char str[],char str1[]) { int strlen1=strlen(str); int strlen2=strlen(str1); if(strlen1<strlen2) return -1; int i,j; for(i=0;i<strlen1;i++) { int flag=1; int pos=i; if(str[i]==str1[0]) { for(j=1;j<strlen2;j++) { i++; if(str[i]!=str1[j]) { flag=0; } } if(flag==1) return pos+1; else i=pos; } } return -1; } void main() { std::cout<<search("abababcdefg","babc"); }
2、实现将一个输入的数字颠倒(输入12345->54321)
#include <iostream> char *change(char *str) { int length=strlen(str); int i; char flag; for(i=0;i<length/2;i++) { flag=str[length-1-i]; str[length-1-i]=str[i]; str[i]=flag; } return str; } void main() { char ch[6]="12345"; std::cout<<change(ch); getchar(); }
3、 使用递归实现二分法查找
#include "stdio.h" void Search(int p[],int low,int height,int key) { int middle=(low+height)/2; if(low>height) { printf("没有该数!"); return; } if(p[middle]==key) { printf("%d\n",middle); return; } else if(p[middle]>key) { Search(p,low,middle-1,key); } else if(p[middle]<key) { Search(p,middle+1,height,key); } } int main() { int p[5]={1,2,3,4,5}; Search(p,0,4,4); return 0; }
4、去掉一个字符串的前后空格
#include <iostream> void removeK(char *ch) { int length=strlen(ch); int i=0; char newchar[200]; int size=0;//记录空格的数量 int flag=0;//标记是否已经开始没有空格 int j=-1; for(i=0;i<length;i++) { if(ch[i]!=' ') flag=1; if(flag==1) { if(ch[i]!=' ') { int a; for(a=0;a<size;a++) { j++; newchar[j]=' '; } size=0; j++; newchar[j]=ch[i]; } else { size++; } } } // printf("%d",strlen(newchar)); int b=0; for(b=0;b<=j;b++) printf("%c",newchar[b]); } int main() { char *ch=" hello helojh fdgdf dfdf "; removeK(ch); }
----转载请注明出处http://www.cnblogs.com/JerryWang1991/ 谢谢!