2011-03-03 56 views
1

切換字符串中的每個單詞對(「ab cd ef gh ijk」變爲「 cd ab gh ef ijk「)在C++中沒有任何庫函數。在c/C++中切換字符串中的每一對單詞(「ab cd ef gh ijk」變爲「cd ab gh ef ijk」)

int main(){ 
char s[]="h1 h2 h3 h4";//sample input 
switch_pair(s); 
std::cout<<s; 
    return 0; 
} 

char * switch_pair(char *s){ 
char * pos = s; 
char * ptr = s; 
int sp = 0;//counts number of space 
while(*pos){ 
    if(*pos==' ' && ++sp==2){ //if we hit a space and it is second space then we've a pair 
     revStr_iter(ptr,pos-1);//reverse the pair so 'h1 h2' -> '2h 1h' 
     sp=0;//set no. of space to zero to hunt new pairs 
     ptr=pos+1;//reset ptr to nxt word after the pair i.e. h3' 
    } 
    pos++; 
} 
if(sp==1) //tackle the case where input is 'h1 h2' as only 1 space is there 
    revStr_iter(ptr,pos-1); 
revWord(s); //this will reverse each individual word....i hoped so :'(
return s; 
} 

char* revStr_iter(char* l,char * r){//trivial reverse string algo 
char * p = l; 
while(l<r){ 
    char c = *l; 
    *l = *r; 
    *r = c; 
    l++; 
    r--; 
} 
return p; 
} 


char* revWord(char* s){//this is the villain....need to fix it...Grrrr 
char* pos = s; 
char* w1 = s; 
while(*pos){ 
    if(*pos==' '){//reverses each word before space 
     revStr_iter(w1,pos-1); 
     w1=pos+1; 
    } 
pos++; 
} 
return s; 
} 

輸入 - H1 H2 H3 H4
預期 - H2 H1 H4 H3
實際 - H2 H1 H3 4H

可以在任何高尚的怪胎靈魂的幫助PLZ:(((

+1

如果列表中包含奇數個單詞,會發生什麼?或者如果一對單詞由多個空格分隔? – 2011-03-03 21:30:38

+0

在奇數字的情況下...最後一個奇數字保持原樣..所以h1 h2 h3將作爲h2 h1 h3輸出 多個空格或製表符可以通過將if條件增加指針,直到我們得到一個空格... – 2011-03-03 21:33:03

+0

連續空格怎麼樣? I.e .:'「h1 h2」'? – MSN 2011-03-03 23:19:02

回答

1
int Groups = 1; // Count 1 for the first group of letters 
for (int Loop1 = 0; Loop1 < strlen(String); Loop1++) 
    if (String[Loop1] == ' ') // Any extra groups are delimited by space 
    Groups += 1; 

int* GroupPositions = new int[Groups]; // Stores the positions 
for (int Loop2 = 0, Position = 0; Loop2 < strlen(String); Loop2++) 
{ 
    if (String[Loop2] != ' ' && (String[Loop2-1] == ' ' || Loop2-1 < 0)) 
    { 
    GroupPositions[Position] = Loop2; // Store position of the first letter 
    Position += 1; // Increment the next position of interest 
    } 
} 

如果您不能strlen的使用,編寫計算任何信件的功能,直到它遇到空終止符「\ 0」。

+1

這很酷...終於我也能夠寫出一個功能...謝謝:) – 2011-03-04 04:33:57

2

國際海事組織,到目前爲止你的工作看起來/看起來更像C代碼比C++代碼更多。我想我會從類似的東西開始:

  1. 斷裂輸入字對象
  2. 字的交換對象對重新排列的話

對於

  • 重新構造字符串,我可能會定義一個最小化的字符串類。幾乎所有它需要(現在)是能夠創建一個字符串給定一個指向char和一個長度(或該順序上的東西),並指定(或交換)字符串的能力。

    我也定義了一個標記器。我不確定它應該是一個功能還是一個班級,但是現在,我們只能說「功能」。它所做的只是查看一個字符串,並找到一個單詞的開頭和結尾,產生類似於指向開頭的指針和單詞的長度。

    最後,你需要/想要一個數組來保存這些單詞。對於第一步,你可以使用一個普通的數組,然後當/如果你想讓數組根據需要自動擴展時,你可以編寫一個小類來處理它。

  • 相關問題