2017-03-14 174 views
2

快速問題,我試圖每次從字符數組中的字符不是隨後的字符時打印一個新行。例如,如果text [i]是'a'而text [i + 1]不是'b',那麼printf(「\ n」);如何直接比較數組中的第一個和第二個元素?

示例I/O將是:

input: "[email protected]" 
output: ab 
     123 
     XY 

輸出現在的問題是:

\n 
\n 
\n 

這是當前代碼我現在有:

void printNext(const char *t){ 
//variable declerations 
int i; 

for(i = 0; t[i] != '\0'; i++){ 

    if(t[i] != t[i + 1])//line in question, which isn't working 
     printf("\n"); 
    else if(t[i] >= '0' && t[i] <= '9') 
     printf("%c",t[i]); 
    else if (t[i] >= 'A' && t[i] <= 'Z') 
      printf("%c",t[i]); 
     else if(t[i] >= 'a' && t[i] <= 'z') 
      printf("%c",t[i]); 


     }//end for 

}//end printNext 

主要功能是:

#include <stdio.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
void printNext(const char *); 

int main(void){ 

    const char t[40] = "[email protected]"; 

    printf("the original sequence of strings is: %s\n", text); 
    printf("new string is: \n"); 
    printNext(t); 


} 
+2

你居然沒問一個問題。如果你的程序不能正常工作,請說明確切的輸入,預期輸出和實際輸出。另外,請提供[mcve]。 – kaylum

+1

如何將if語句更改爲if(t [i] + 1!= t [i + 1])? – Shiping

+0

@minigeek實際輸出或具體問題在哪裏?我們所有的是「不工作」。 – kaylum

回答

1

從各種情況中刪除其他。否則,如果僅在「如果」失敗時被選中,但您希望通過檢查下一個條件,則還要更改檢查條件的順序。

for(i = 0; t[i] != '\0'; i++){ 
    if(t[i] >= '0' && t[i] <= '9') 
      printf("%c",t[i]); 
    if (t[i] >= 'A' && t[i] <= 'Z') 
      printf("%c",t[i]); 
    if(t[i] >= 'a' && t[i] <= 'z') 
      printf("%c",t[i]); 
    if(t[i] + 1 != t[i + 1]) 
      printf("\n"); 
}//end for 

變化主要

int main(){ 
    const char t[80] = "[email protected]"; 
    printf("the original sequence of strings is: %s\n", t); 
    printf("new string is: \n"); 
    printNext(t);  
    return 0; 

} 
+0

嗯,這似乎不工作,這個代碼的輸出是:a \ nb \ nk \ n 1 \ n 2 \ n 3 \ n \ n X \ n Y – CMcorpse

+0

@CMcorpse是啊你說你想要換行每輸入一次後 – minigeek

+0

不只是當一個字符不是後面的字符。 – CMcorpse

1

我建議這樣的@ minigeek的回答

#include <stdio.h> 
#include <ctype.h> 
#include <stdbool.h> 

bool sameKindAndSeq(unsigned char a, unsigned char b){ 
    if(!a || !b || a + 1 != b) 
     return false; 
    if(islower(a)) 
     return islower(b); 
    if(isupper(a)) 
     return isupper(b); 
    if(isdigit(a)) 
     return isdigit(b); 
    return false; 
} 

void printNext(const char *t){ 
    bool first = true;//flag of top of sequence of same kind 
    for(; *t; ++t){ 
     if(first){ 
      if(sameKindAndSeq(*t, t[1])){ 
       putchar(*t); 
       first = false; 
      } 
     } else { 
      if(sameKindAndSeq(t[-1], *t)){ 
       putchar(*t); 
      } 
      if(!sameKindAndSeq(*t, t[1])){ 
       putchar('\n'); 
       first = true; 
      } 
     } 
    } 
} 

int main(void){ 
    printNext("[email protected]"); 
} 
+0

[DEMO](http://ideone.com/tQGZUv) – BLUEPIXY

+0

布爾值也存在於c! – minigeek

+0

@minigeek你想說什麼? – BLUEPIXY

0

稍微更可讀的版本:

void printNext(const char *t) 
{ 
    int i; 
    int isdigit(int); 
    int isupper(int); 
    int islower(int); 

    for(i = 0; t[i] != '\0'; i++){ 
     if (isdigit(t[i])) 
      printf("%c",t[i]); 
     if (isupper(t[i])) 
      printf("%c",t[i]); 
     if(islower(t[i])) 
      printf("%c",t[i]); 
     if(t[i] + 1 != t[i + 1]) 
      printf("\n"); 
    } 
} 
相關問題