2013-09-15 14:49:09
將乙個字串中的單詞進行倒置,標點符號也倒置,
如輸入:hello,nice to meet you!
輸出:!you meet to nice,hello
將**中的while ( *pcur && isalphabet(*pcur) )
換成while ( *pcur && *pcur!= ' ' )
即可實現翻轉單詞,標點符號不倒換,
即輸入:hello,nice to meet you!
輸出:you!meet to hello,nice
注意testdriver函式中不能定義輸入為:
pchar srcstrarray = ;
因為這樣的話,每個char*的指標指向的是靜態區,靜態區的資料就不能改變,在執行時到reversestring(char *psrc,size_t begin,size_t end)函式的 *(pstr + index) = *(psrc + end - index);就會出錯,因為該語句試圖改變靜態區的資料,是不允許的。
這樣的錯誤,類似於下面的:
char *pstr1 = "hello";
char *pstr2 = "hello";
可以用*pstr2 = 『a』;改變pstr2指向的字串,改變後為"aello";
但不可改變pstr1指向的字串的內容,因此*pstr1 = 『a』;是不允許的。
1 #include 2 #include 3using
namespace
std;45
//翻轉首位址為psrc,索引從begin到end的字元
6void reversestring(char *psrc,size_t begin,size_t end)721
}2223//
判斷字元是否為字母
24bool isalphabet(char
ch)25
2829
//翻轉單詞
30char * reverseword(char *pstr) //
不能定義為const
3139
40 reversestring(pstr,0,len - 1
);41 cout4243
char *pcur = (char *)pstr;
44int wordbegin = 0;45
int wordend = 0;46
47while (*pcur)
4855
56 wordend = pcur - 1 - pstr; //
pcur與pstr相等時,wordend定義為size_t會出錯
5758
if (wordbegin 5962
63 ++pcur;64}
65return
pstr;66}
6768
69 typedef char *pchar;
7071
void
testdriver()72;
74char srcstrarray[100] = ;
75 size_t arraylength = 4;76
77pchar srcstr;
7879
for (size_t index = 0;index < arraylength;++index)
8087}88
89int
main()
90
測試結果:
the source stringis : 0123456
6543210
the reversed
string
is : 6543210
the source
string
is : i am a good boy!
!yob doog a ma i
the reversed
string
is : !boy good a am i
the source
string
is : hello,nice to meet you!
!uoy teem ot ecin,olleh
the reversed
string
is : !you meet to nice,hello
the source
stringis:
the reversed
stringis:
請按任意鍵繼續. . .
將**中的while ( *pcur && isalphabet(*pcur) )
換成while ( *pcur && *pcur!= ' ' )
即可實現翻轉單詞,標點符號不倒換,測試結果:
the source stringis : 0123456
6543210
the reversed
string
is : 0123456
the source
string
is : i am a good boy!
!yob doog a ma i
the reversed
string
is : boy!good a am i
the source
string
is : hello,nice to meet you!
!uoy teem ot ecin,olleh
the reversed
string
is : you!meet to hello,nice
the source
stringis:
the reversed
stringis:
請按任意鍵繼續. . .
將乙個字串逆序
這個題要我自己寫還不太有思路,可能不會想到寫三個函式,而且這個 也沒有執行出來 include include include pragma warning disable 4996 有乙個字元陣列的內容為 student a am i 請你將陣列的內容改為 i am a student 要求 不能...
在乙個字串中尋找另外乙個字串
在乙個字串中尋找另外乙個字串 public class text foundit true break test system.out.println foundit?found it didn t find it 該段程式有點難以理解,主要就是if語句的理解,if searchme.charat ...
將乙個字串中的字元替換成另乙個字串
被替換的字串當然不僅僅是空格,上面只是個例子 include include include using namespace std int findnumberfirst const char str,const char dest,vector pvec else return count in...