我一直在使用Stroustrup的C ++编程语言,而且我在早期的exersize方面遇到了困难。任务是构建一个反转c样式字符串的方法rev。我认为我的逻辑是正确的,但是当我尝试修改字符串时出现错误。我可以不这样做吗?
int strlen_(char* string)
{
int count = 0;
while (*string != '\0'){
count ++;
string ++;
}
return count;
}
void rev(char* string)
{
//length of the string is going to be useful
int len = strlen_(string);
//two counters, one going forward, one going back
int forwardIndex = 0;
int backwardIndex = len-1;
char temp;
while (forwardIndex < backwardIndex){
temp = string[forwardIndex];
string[forwardIndex] = string[backwardIndex]; //Exception Here
string[backwardIndex] = temp;
forwardIndex--;
backwardIndex--;
}
}
void main()
{
char* test = "test";
rev(test);
}
答案 0 :(得分:5)
您不能修改文字字符串,而反向函数会修改它的字符串参数。
通过传递类似的内容来测试你的反向函数:
void main()
{
char test[] = "test";
rev(test);
}
这将在您可以修改的数组中复制文字字符串"test"
。
此外,您正在递减forwardIndex
和backwardIndex
:您应该递增 forwardIndex
:forwardIndex++
。这个想法是指数会在中间相遇。
答案 1 :(得分:0)
似乎你正在递减forwardIndex。第一次运行后,它将为-1。查找forwardIndex--;
并更改为forwardIndex++;