南京三星面试准备1--字符串
来源:互联网 发布:路由器如何连接网络 编辑:程序博客网 时间:2024/05/01 06:26
字符串
1、把一串字符串里的数字找出来加起来
long long int AddNumInChar(const char* str){assert(str!=NULL);int length=strlen(str);long long int result=0;for(int i=0;i<length;i++){if(str[i]>='0'&&str[i]<='9'){result+=str[i]-'0';}}return result;}
2、把字符串转换成整数
void Char2Int(const char*str){assert(str!=NULL);int length=strlen(str);long long int result=0;bool flag=false;bool fuhao=true;for(int i=0;i<length;i++){if(i==0&&(str[0]=='+'||str[0]=='-')){fuhao=str[0]=='-'?false:true;}else if(str[i]>='0'&&str[i]<='9'){flag=true;result=result*10+str[i]-'0';}else{printf("My God\n"); return;}}if(!fuhao)result=result*(-1);printf("%lld\n",result);}
3、把字符串顺序倒过来
char* reverseString(char* str){assert(str!=NULL);int length=strlen(str);for(int i=0;i<length/2;i++){char temp=str[i];str[i]=str[length-i-1];str[length-i-1]=temp;}return str;}
4、找字符串里的回数
char *FindString(const char *str){assert(str!=NULL);int length=strlen(str);int *numbers=new int[length];float *index=new float[length];numbers[0]=numbers[length-1]=1;index[0]=0;index[length-1]=length-1;int left,right;for(int i=1;i<length-1;i++){left=i-1;right=i+1;if(str[left]!=str[right]&&str[left]!=str[i]&&str[i]!=str[right]){numbers[i]=1;index[i]=i;}else {if(str[left]==str[right]){numbers[i]=3;index[i]=i;}else if(str[left]==str[i]){numbers[i]=2;index[i]=(left+i)/2.0;right=i;}else if(str[i]==str[right]){numbers[i]=2;index[i]=(right+i)/2.0;left=i;}while(--left>=0&&++right<length){if(str[left]==str[right])numbers[i]+=2;elsebreak;}}}int max=numbers[0];int tempI=0;for(int i=0;i<length;i++){if(numbers[i]>max){tempI=i;max=numbers[i];}}char *result=new char[max];for(int i=0;i<max;i++){int temp=floor(i+index[tempI]-max/2+0.5);result[i]=str[temp];}delete []numbers;return result;}
5、替换空格为%20:
char* ChangeString(char* myChar,int length){ char* result=new char[length*3]; int count=0; for(int i=0;i<length;i++) { if(myChar[i]==' ') { result[count++]='%'; result[count++]='2'; result[count++]='0'; } else { result[count++]=myChar[i]; } } result[count]='\0'; return result;}
6、翻转单词顺序
void Reverse(char* const numbers,int length){char temp;for(int i=0;i<length/2;i++){temp=numbers[i];numbers[i]=numbers[length-i-1];numbers[length-i-1]=temp;}}void PrintReverse(char* const numbers,int length){int i=0;Reverse( numbers,length);int letterLen=0,begin=0;i=0;bool flag=true;while(numbers[i]!='\0'){if(numbers[i]!=' '){flag=true;letterLen++;}else if(flag){if(letterLen>1)Reverse(numbers+begin,letterLen);letterLen=0;begin=i+1;flag=false;}elsebegin++;i++;}Reverse(numbers+begin,letterLen);printf("%s\n",numbers);}左旋转字符串
void Reverse(char* const numbers,int length)
{
char temp;
for(int i=0;i<length/2;i++)
{
temp=numbers[i];
numbers[i]=numbers[length-i-1];
numbers[length-i-1]=temp;
}
}
void PrintMov(char* const numbers,int move)
{
int length=strlen(numbers);
move=move%length;
Reverse( numbers,length);
Reverse(numbers,length-move);
Reverse(numbers+length-move,move);
printf("%s\n",numbers);
}
7、第一次只出现一次的字符
int FirstOneCharacter(const char* characters){int appearances[LetterNum]={0};int result=-1;if(characters==NULL)return result;int length=strlen(characters);for(int i=0;i<length;i++){appearances[characters[i]-'A']++;}for(int i=0;i<length;i++){if(appearances[characters[i]-'A']==1){result=i;break;}}return result;}
8、字符串的全排列:
void Permutation(char* source,char *begin);void Permutation(char* source){int length=strlen(source);if(source==NULL||length<=0)return;Permutation(source,source);}int *Sort(char *arrays){int length=strlen(arrays);char temp;int *index=new int[length];int tempIndex;for(int i=0;i<length;i++){index[i]=i;}for(int i=0;i<length;i++){for(int j=i;j<length;j++){if(arrays[j]<arrays[i]){temp=arrays[j];arrays[j]=arrays[i];arrays[i]=temp;tempIndex=index[j];index[j]=index[i];index[i]=tempIndex;}}}return index;}void Permutation(char* source,char *begin){if(begin[0]=='\0')printf("%s\n",source);else{int length=strlen(begin);char *temp=new char[length+1];int i=0;char word;int *index;temp=strcpy(temp,begin);index=Sort(temp);for(;i<length;i++){if(i>0&&temp[i]==temp[i-1])continue;swap(begin[0],begin[index[i]]);Permutation(source,begin+1);swap(begin[0],begin[index[i]]);}delete []temp;delete []index;}}
9.又见字符串的问题
1.给出一个函数来复制两个字符串A和B。
字符串A的后几个字节和字符串B的前几个字节重叠。
分析:记住,这种题目往往就是考你对边界的考虑情况。
2.已知一个字符串,比如asderwsde,寻找其中的一个子字符串比如sde的个数,
如果没有返回0,有的话返回子字符串的个数。
3.编写strcpy函数,不可以用字符串相关的库函数。
- 南京三星面试准备1--字符串
- 南京三星面试准备2--链表
- 南京三星面试准备3--数组&基础数据结构
- 南京三星面试复习
- 【面试准备】字符串反序
- 面试准备-数组和字符串
- 面试准备之--字符串旋转
- 三星南京研发中心2014暑期实习嵌入式开发面试笔试部分
- 【找工作】南京三星中国研究院
- 面试准备(1)
- android 面试准备1
- java面试准备1
- 面试资料准备(1)
- 前端面试准备(1)
- 面试准备1
- 4小时准备,出差南京
- 面试南京移动归来
- 南京技术面试回顾
- 压缩图片
- strcmp
- 如何优化JS代码
- shell script - usuage of the for loop
- Android -- Thread
- 南京三星面试准备1--字符串
- jni学习之三--数据传递
- Windows下搭建Eclipse+Android4.0开发环境
- 会用到的
- 解决ubuntu 13.04登入系统后触摸板不能使用的问题
- java正则表达式判断是否只包含:数字、字母和汉字
- Inno Setup入门(四)——为程序创建桌面快捷方式
- HDU 1878 欧拉回路
- 常用正则表达式大全!(例如:匹配中文、匹配html)