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--;
}
}
}
答案 0 :(得分:1)
void prtWords(char *pSentence)
{
char tmpStrg[81], *pT=tmpStrg;
根据你的代码,我想你在这里使用tmpStrg[81]
作为一个单词的新字符串,然后你以相反的顺序打印这个单词。
int length=0;
while(*pSentence != '\0')
{
while(*pSentence != ' ')
{
以下是您的溢出问题,您应该同时测试\0
和(并将第二个
while
更改为&&
第一个{{1}不变)。无法保证句子以while
结尾。
当 *pT=*pSentence;
pT++;
pSentence++;
length++;
}
pSentence++;
while(length >= 0);
为length
时,您不应该做任何事情。更改为0
。
>
您应该先 {
printf("%c", *pT);
,因为上一个pT--
没有作业。
pT++
此处 pT--;
length--;
}
时打印。
*pSentence == ' '
自己编写完整的代码,因为它是家庭作业。欢迎任何进一步的问题。
答案 1 :(得分:1)
@ Duck的评论“将问题分解成碎片。”现场观点,并突出了最重要的设计/编程技术之一。
我不熟悉最常用于测试C代码的单元测试框架,但另一个好的起点是编写一些测试。
此代码可能并不完全符合您的要求,因为它可以执行其工作:
void ReverseInPlace(char * pstart, char * pend)
{
char tmp;
while (pend > pstart)
{
tmp = *pstart;
*pstart++ = *pend;
*pend-- = tmp;
}
}
void ReverseWordsInPlace(char *pSentence)
{
char * pstart;
char * pend;
pstart = pSentence;
while (*pstart != '\0')
{
// skip any (multiple) starting spaces
while (*pstart == ' ')
{
pstart++;
}
pend = pstart;
// find end of word (terminated by a space or end of string)
while (*pend != ' ' && *pend != '\0')
{
pend++;
}
// check if anything left to do
if (pstart >= pend - 1)
return;
ReverseInPlace(pstart, pend - 1);
pstart = pend;
}
}
int main(int argc, char * argv[])
{
char string1[] = "The quick brown fox jumped over the lazy dog";
char string2[] = "_";
char string3[] = " ";
char string4[] = " another";
char string5[] = "hello ";
char string6[] = "";
char string7[] = " ab";
ReverseWordsInPlace(string1);
ReverseWordsInPlace(string2);
ReverseWordsInPlace(string3);
ReverseWordsInPlace(string4);
ReverseWordsInPlace(string5);
ReverseWordsInPlace(string6);
ReverseWordsInPlace(string7);
printf("%s\n", string1);
printf("%s\n", string2);
printf("%s\n", string3);
printf("%s\n", string4);
printf("%s\n", string5);
printf("%s\n", string6);
printf("%s\n", string7);
return 0;
}