今天做一道算法题,是traverse一个null-terminated char array。
所谓null-terminated char array就是以 ‘\0’ 结尾的char array。
这个算法实现起来并没有难度,代码如下:
#include <iostream>
using namespace std;
void reverse(char* str){
int n = strlen(str);
cout << n << endl;
for(int i = 0;i < n/2;i++){
char temp = str[i];
str[i] = str[n-i-1];
str[n-i-1] = temp;
}
}
void reverse1(char *str){
char* end = str;
char temp;
if(str){
while(*end){
end++;
}
--end;
while(str < end){
temp = *str;
*str++ = *end;
*end-- = temp;
}
}
}
int main(){
char a[10] = "abcdef\0";// char *a = "abc"; is not the expression of null-terminated
//char *a = "abcdef";
cout << a << endl;
reverse1(a);
cout << a << endl;
}
这里两种实现方式就不细说了,说说我犯的一个错误。在main中,我一开始声明数组的方式是char *a = "abcdef";
。这样每当我用a[i] = num;
的方式赋值的时候,编译器就会报错。貌似这样声明的数组,并非null-terminated char array,系统不会用index的方式去赋值。所以当我把声明方式改成了char a[10] = "abcdef\0";
编译器就不会报错了。
不一定非要在声明的时候加一个'\0'
,只要在声明的时候,比所赋值的长度大至少一个就可以了。比如char a[4] = 'abc';
或者
char a[5] = 'abc';