南京三星面试准备1--字符串
字符串
1、把一串字符串里的数字找出来加起来
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、第一次只出现一次的字符
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函数,不可以用字符串相关的库函数。