在C++中,char *point和char[n]的区别在于,char *point的里面的某个位的值是不可改变的。而char[n]的里面某一位的值是可以改变的。代码如下:
#include
using namespace std;
int main()
{
char ch1[20] = “123456789”;
char *charp = “abcdefgh”;
ch1[1] = ‘a’;//这个可以正常写入和修改
charp[1] = ‘a’;//会报写入位置冲突。
cout << ch1 << endl;
cout << charp << endl;
system(“pause”);
return 0;
}
翻转句子里面的单词意思就是把"I am a boy"通过代码实现变为“boy a am I”这种形式。
通过上述描述我们知道我们是要修改char数组的东西。
我们可以这样实现,先把整个句子翻转,代码实现如下:
#include
using namespace std;
void reverser(char *begin, char *end)
{
while (begin < end)//采用二分形式进行首和尾的替换。
{
char temp = *begin;
*begin = *end;
*end = temp;
begin++;
end–;
}
}
void rvervserChar(char *ch)
{
char *end = ch;
while (*end != ‘\0’)
{
end++;
}
end–;//获得’\0’之前的那一个字符的位置。
char *begin = ch;
reverser(begin, end);
}
int main()
{
char ch1[20] = “I am a boy”;
rvervserChar(ch1);
cout << ch1 << endl;
system(“pause”);
return 0;
}
下面我们来翻转单词,单词和单词之间存在空格,翻转单词,我们只需要知道单词的开头的位置和结尾的位置,然后调用void reverser(char *begin, char *end)就可以实现单词的翻转。通过对字符串判断是否为空格,来确认是否一个单词已经结束。
我们需要两个指针,一个跟踪单词的头部,一个跟踪单词的尾部,反转的时候带入reverser函数即可。
void rvervserChar(char *ch)
{
char *end = ch;
while (*end != ‘\0’)
{
end++;
}
end–;
char *begin = ch;
reverser(begin, end);
char *phead1 = ch;
char *phead2 = ch;
while (*phead1 != ‘\0’)
{
phead1++;
if (*phead1 == ’ ‘)//单位phead1为空格的时候,说明找到单词分界线,
{
char *temp = phead1;//保留单词分界线,并且下面+1,走到下一个单词的开头。
temp++;
phead1–;
reverser(phead2, phead1);翻转单词。
phead1 = temp;//把下个单词的头重新赋值给两个指针。
phead2 = temp;
}
}
reverser(phead2, --phead1);//phead1==’\0’的时候退出的,所以需要,在–phead1时候执行一次单词的反转。
}
字符串的指针操作是编程的一大难点,望切记切记。