字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
原题地址:
原题
或直接转到:
https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
我的题解:
char* reverseLeftWords(char* s, int n){
int q=0;
while(1){
if(*(s+q)=='\0'){
break;
}
q++;
}
int i,j,k,m;
char zfc[10001];
k=0;
for(i=0;i<q;i++){
zfc[i]=' ';
}//初始化
for(m=0;m<(q-n);m++){
zfc[m]=s[m+n];
}//先装入后几位
for(j=0;j<n;j++){
zfc[m+j]=s[j];
}
for(k;k<q;k++){
s[k]=zfc[k];
}//返回原大小数组
return s;
}//Func_reverseLeftWords
写这个程序的时候思路非常清晰,就是会出现不可名状的错误,让我很费解,纠结了得有三个小时。现在想想也挺傻的,当祭天了吧,卡住我的重点会下划线标出来。
我分别测量了实参s所占空间和形参s所占空间,结果很有意思。
–首先实参很正常,是数组元素数量加上一个“\0”的数量,也就是大小n+1
–而形参大小却变成了8
根据我的思考和查阅,应该是编译器的特性,传参前是数组,因此直接显示数组的大小。而传参后默认是一个指针,至于指针和数组的关系。数组就是指针,这个编译器是知道的。可是传参后指针就失去了参照,也就是说系统不知道指针原来是个什么数组。这时sizeof函数取到的就是指针所占空间,8字节,我佛了。
至于需不需要初始化,这里我为了程序舒服点,我进行初始化了,占用了一点内存,不过最后成绩不错。
我最难受的就是这个传参,数组传入名字,传入之后就变成指针变量的大小而不是数组的大小了,我还是没有程序严谨,可惜。