[英]How to reverse words one by one in c using pointers and arrays
嘿,是的,你猜對了家庭作業。 我正在嘗試使用指針反向打印字符串。 雖然只有文字。 所以“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 == ' '
。
}
}
自己編寫完整的代碼,因為這是家庭作業。 歡迎任何進一步的問題。
@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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.