指針出現問題了。求指教


函數是判斷回文,並且清除里面的空格。

void deleteBlank(char* s)
{
int count = 0;
char *p = s;
char *q = new char[strlen(s)];
//strcpy(q,s);
while(*p!= '\0')
{

   if(*p == ' ')
   {
   count++;
   }
   else
   {
   *q = *p;
   q++;
   }
   p++;
}

cout << q << endl;
}

把不是空格p指向賦給q指向的,但是為什么出現p指向的沒有字符串?

5 个解决方案

#1


void deleteBlank(char* s)
{
    int count = 0;
    char *p = s;
    char *q = new char[strlen(s)+1];
char *bakQ = q;
    //strcpy(q,s);
    while(*p!= '\0')
    {
       if(*p == ' ')
       {
           count++;
       }
       else
       {
           *q = *p;
           q++;
       }
       p++;
    }
*q = '\0';

    cout << bakQ << endl;
delete []bakQ;
}

q
\0

#2


bool IsBcktxt( const char * s )
{
int len = strlen( s );
for( int i1 = 0, i2 = len-1; i1 < i2; ++i1, --i2 )
{
if( s[i1] != s[i2] )
return false;
}
return true;
}

void deleteBlank(char* s)
{
    int count = 0;
    char *p = s;
    char *q = new char[strlen(s)+1];
char *bakQ = q;
    while(*p!= '\0')
    {
       if(*p == ' '||*p == '\t')
       {
           count++;
       }
       else
       {
           *q = *p;
           q++;
       }
       p++;
    }
*q = '\0';

    cout << bakQ << endl;
if( IsBcktxt( bakQ ) )
{
printf( "是的是的" );
}
else
{
printf( "不是不是" );
}
delete []bakQ;
}

int main()
{
char s[] = "ab cdcba\t";
deleteBlank( s );
return 0;
}
/

#3


q指針不是一直在++嗎,指向一直在往后移,當然打印不出字符串,因為指針已經指向最后一位了

#4


你用一個指針先記錄下q

#5


VC調試時按Alt+8、Alt+6和Alt+5,打開匯編窗口、內存窗口和寄存器窗口看每句C對應的匯編、單步執行並觀察相應內存和寄存器變化,這樣過一遍不就啥都明白了嗎。
對VC來說,所謂‘調試時’就是編譯連接通過以后,按F10或F11鍵單步執行一步以后的時候,或者在某行按F9設了斷點后按F5執行停在該斷點處的時候。
(Turbo C或Borland C用Turbo Debugger調試,Linux或Unix下用GDB調試時,看每句C對應的匯編並單步執行觀察相應內存和寄存器變化。)
想要從本質上理解C指針,必須學習匯編以及C和匯編的對應關系。
從匯編的角度理解和學習C語言的指針,原本看似復雜的東西就會變得非常簡單!
指針即地址。“地址又是啥?”“只能從匯編語言和計算機組成原理的角度去解釋了。”

這輩子不看內存地址和內存值;只畫鏈表、指針示意圖,畫堆棧示意圖,畫各種示意圖,甚至自己沒畫過而只看過書上的圖……能從本質上理解指針、理解函數參數傳遞嗎?本人深表懷疑!
這輩子不種麥不收麥不將麥粒拿去磨面;只吃饅頭、吃面條、吃面包、……甚至從沒看過別人怎么蒸饅頭,壓面條,烤面包,……能從本質上理解面粉、理解面食嗎?本人深表懷疑!!

提醒:
“學習用匯編語言寫程序”

“VC調試(TC或BC用TD調試)時按Alt+8、Alt+6和Alt+5,打開匯編窗口、內存窗口和寄存器窗口看每句C對應的匯編、單步執行並觀察相應內存和寄存器變化,這樣過一遍不就啥都明白了嗎。
(Linux或Unix下可以在用GDB調試時,看每句C對應的匯編並單步執行觀察相應內存和寄存器變化。)
想要從本質上理解C指針,必須學習C和匯編的對應關系。”
不是一回事!

不要迷信書、考題、老師、回帖;
要迷信CPU、編譯器、調試器、運行結果。
並請結合“盲人摸太陽”和“駕船出海時一定只帶一個指南針。”加以理解。
任何理論、權威、傳說、真理、標准、解釋、想象、知識……都比不上擺在眼前的事實!

有人說一套做一套,你相信他說的還是相信他做的?
其實嚴格來說這個世界上古往今來所有人都是說一套做一套,不是嗎?

不要寫連自己也預測不了結果的代碼!

電腦內存只是一個一維二進制字節數組及其對應的二進制地址;
人腦才將電腦內存中的這個一維二進制字節數組及其對應的二進制地址的某些部分看成是很多數組、指針、數組指針、指針數組、數組的數組、指針的指針、二維數組、……

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: