1.实现字符串翻转函数
实现字符串翻转函数。例如,“July”翻转后成为“yluJ”
/*实现字符串的反转*/
void reverseString(char *s,int n){
int from =0;
int to = n -1;
while(from < to){
int temp = s[from];
s[from++] = s[to];
s[to--] = temp;
}
return ;
}
2.字符串的定向移动。
给定一个字符串,这个字符串为和26个字母的组合。现在需要把字符串中的好都移动到最左侧,而把字符串中的字母移动到最右侧且保持相对顺序不变,要求时间复杂度和空间复杂度最小。
/*字符串的左右移动*/
void moveString(char *s,int n){
int j = n - 1,i;
for( i = n-1 ; i >= 0 ; i--){
if(s[i] != '*'){
s[j--] = s[i];
}
}
for(i = 0; i <= j ; i ++){
s[i] = '*';
}
return ;
}
3.字符个数的统计
给定字符串,写一个函数,查找高字符串中每个字符出现的次数,要求区分大小写,且时间复杂度为O(n)
/*统计字符个数*/
void countString(){
char s[3]= "!aw";
int m[106]={'0'},i = 0;
for(i = 0 ; i < strlen(s) ; i++){
printf("%c %d\n" ,s[i],m[s[i] - ' '] );
m[s[i] - ' '] += 1;
}
for(i = 0 ; i < 106;i++){
printf("%d : %d\n ",i,m[i]);
}
return ;
}
4.字符串的压缩
给定一个字符串,将其中连续出现的空格压缩成1个,将其中以空格分隔的每个字符逆序打印出来。
/*字符串空格的压缩*/
void reverseStr(char *s,int from,int to){
while(from < to){
char temp = s[from];
s[from ++] = s[to];
s[to --] = temp;
}
}
void compressSpace(char *s,int n,char *m){
int temp = 0,i,j = 0,flag = 0;
for(i = 0; i < n ;i++){
if(s[i] != ' '){
m[j] = s[i];
j++;
flag = 0;
}else if(flag == 0){
reverseStr(m,temp,j-1);
temp = j +1;
m[j] = ' ';
j++;
flag = 1;
}else{
continue;
}
}
m[j] = '\0';
reverseStr(m,temp,j-1);
}