嘿,是的,你猜对了作业。我正在尝试使用指针反向打印字符串。虽然只有文字。所以“ Hello World ”是“olleh dlrow”。 我在下面的代码中所做的是将一个指针(pSentence,它是从主函数传递下来的多个单词的字符串数组)分配给一个临时指针直到一个空格,然后向后递增并从临时指针打印字符到单词的开头,然后再做一次。我目前被困住了,我不知道如何标记单词的开头并只增加到那个。我知道 while(pt != '0') 根本不是这样做的方法。提示说将单词存储到一个临时字符串(tmpStrg)中并使用 pT 指向它,所以也许我需要对 tmpStrg 做些什么?非常感谢任何帮助,并在此先感谢您!
void prtWords(char *pSentence)
{
char tmpStrg[81], *pT=tmpStrg;
int length=0;
while(*pSentence != '\0')
{
while(*pSentence != ' ' && *pSentence != '/0')
{
*pT=*pSentence;
pT++;
pSentence++;
length++;
}
pSentence++;
while(length >= 0);
{
printf("%c", *pT);
pT--;
length--;
}
}
}
最佳答案
void prtWords(char *pSentence)
{
char tmpStrg[81], *pT=tmpStrg;
根据您的代码,我想您在这里使用 tmpStrg[81]
作为单词的新字符串,然后以相反的顺序打印单词。
int length=0;
while(*pSentence != '\0')
{
while(*pSentence != ' ')
{
这是你的溢出问题,你应该同时测试 \0
和 (并将第二个
while
更改为 &&
与第一个 while
不变)。不能保证句子以 结尾。
*pT=*pSentence;
pT++;
pSentence++;
length++;
}
pSentence++;
while(length >= 0);
当length
为0
时,您不应该做任何事情。更改为 >
。
{
printf("%c", *pT);
你应该先做 pT--
,因为最后一个 pT++
没有赋值。
pT--;
length--;
}
当*pSentence == ' '
时,这里打印一个。
}
}
自己编写完整的代码,因为这是家庭作业。欢迎提出任何进一步的问题。
关于c - 如何使用指针和数组在c中一个一个地反转单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118432/