c++ 输入“I am a student.”输出“student. a am I”能编译通过,运行有问题 ,哪里有错?
intmain(){char*p="Iamastudent.";voidturnaround(char*p);turnaround(p);while(*p!='\0')c...
int main()
{
char *p = "I am a student.";
void turnaround(char * p);
turnaround(p);
while (*p != '\0')
cout << *p++;
return 0;
}
void swap(char &c1, char &c2);
void turnaroundword(char * pbeg,const char & c);
void turnaround(char * p)
{
char *pbeg = p;
char *pend = p;
turnaroundword(p,'\0');
while (1)
{
if (*pend == ' ')
{
turnaroundword(pbeg, ' ');
pbeg = pend +1;
}
if (*pend == '\0')
{
turnaroundword(pbeg, '\0');
break;
}
pend++;
}
}
void turnaroundword(char * pbeg,const char &stop)
{
if (pbeg == NULL)
return;
char * pend = pbeg;
while (*pend != stop && *pend != '\0')
++pend;
--pend;
while (pbeg < pend)
{
swap(*pbeg, *pend);
++pbeg;
--pend;
}
}
void swap(char &c1, char &c2)
{
char c = c1;
c1 = c2;
c2 = c;
} 展开
{
char *p = "I am a student.";
void turnaround(char * p);
turnaround(p);
while (*p != '\0')
cout << *p++;
return 0;
}
void swap(char &c1, char &c2);
void turnaroundword(char * pbeg,const char & c);
void turnaround(char * p)
{
char *pbeg = p;
char *pend = p;
turnaroundword(p,'\0');
while (1)
{
if (*pend == ' ')
{
turnaroundword(pbeg, ' ');
pbeg = pend +1;
}
if (*pend == '\0')
{
turnaroundword(pbeg, '\0');
break;
}
pend++;
}
}
void turnaroundword(char * pbeg,const char &stop)
{
if (pbeg == NULL)
return;
char * pend = pbeg;
while (*pend != stop && *pend != '\0')
++pend;
--pend;
while (pbeg < pend)
{
swap(*pbeg, *pend);
++pbeg;
--pend;
}
}
void swap(char &c1, char &c2)
{
char c = c1;
c1 = c2;
c2 = c;
} 展开
1个回答
展开全部
同学,你对字符串、字符串常量、字符数组、c++的内存模型了解不到位。
你在main()中第一行:char *p = "I am a student.";
声明了一个指针p,指向一个字符串常量"I am a student."。所谓常量,就是不能改变的量,其存在内存中的常量区,而你下面的代码中试图改变这个常量的值(试图进行字符交换)。所以运行时异常。
把main()中第一行:char *p = "I am a student.";
改为:char[ ] p = "I am a student."; 试试。
这样p就是一个字符数组形式的字符串了,其存储在内存的栈空间,是可以改变的,当然不能超出其长度。
你在main()中第一行:char *p = "I am a student.";
声明了一个指针p,指向一个字符串常量"I am a student."。所谓常量,就是不能改变的量,其存在内存中的常量区,而你下面的代码中试图改变这个常量的值(试图进行字符交换)。所以运行时异常。
把main()中第一行:char *p = "I am a student.";
改为:char[ ] p = "I am a student."; 试试。
这样p就是一个字符数组形式的字符串了,其存储在内存的栈空间,是可以改变的,当然不能超出其长度。
更多追问追答
追问
char p[] = "I am a student.";
while (*p != '\0')
cout << *(p++); \\ 这里显示需要左值 不能对p++吗?
追答
可以把数组名当成指针来用的。所以可以p++
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询