2014-06-24 20 views
0

首先需要將字符串轉換成單獨的ASCII值,那麼我們就必須完成以下任務:字符串測序儀

檢查區別兩個連續的ASCII(字符串值)爲1或沒有。如果差值爲1 那麼它們將被耦合在一起並打印出來。

ex。 ABCD 單獨的ASCII值:65 67 68 69 兩個連續的ASCII值的差值是1,所以連在一起然後打印出來。

#include<stdio.h> 
#include<string.h> 

    int main(){ 

     char str[100]; 
     int i=0; 

     printf("Enter any string: "); 
     scanf("%s",str); 

     printf("ASCII values of each characters of given string: "); 
     while(str[i]) 
      printf("%d ",str[i++]); 



     return 0; 
    } 

此代碼打印的ASCII值,但我不知道如何檢查兩個連續的值,以及如何他們夫婦之間的差異。

+1

只需減去值! –

+0

我不知道夫婦是什麼...... ABCD應該打印ABBCCD? – nightshade

+0

@nightshade ex。輸入是ACBE,下面的ASCII值是65 67 66 69.so這兩個連續的差值即A和C不是1,C和B的差值是1,因此它們將被打印爲CB,B和E差值不是1,所以結果ACBE是CB。所以他們是耦合的。 – Spade

回答

0

好,給你一個線索,而不是entierly解決您的問題:

由於char在C整型,請執行以下操作:

if('B' - 'A' == 1){ 
    printf("OK\n"); 
} 

if('C' - 'A' == 2){ 
    printf("OK\n"); 
} //etc 

(在ideone

剛想想你應該在循環中改變什麼,我想你會得到這個想法:)

0

我認爲最簡單的方法去你的公關它會在讀取字符串之後,創建一個指向它的指針,然後通過字符串檢查提前指向一個指針,其中*pointer - *(pointer - 1) == 1。對pointer values > string[0]這樣做,你可以檢查你的兩個相鄰的字符是否耦合。 (你將需要差異的絕對值)。在您的解決方案快速的黑客會是這個樣子:

#include<stdio.h> 
#include<string.h> 

int absdiff (unsigned a, unsigned b) { 
    if (a == b) return 0; 
    return (a > b) ? a - b : b -a; 
} 

int main(){ 

    char str[100]; 
    char cpl[3]; 
    cpl[2]='\0'; // null terminate cpl 
    //int i=0; 

    printf("Enter any string: "); 
    scanf("%s",str); 

    printf("ASCII values of each characters of given string: \n"); 
    char *ptr = str; 
    while(*ptr) { 
     if ((ptr - str) > 0) { 
      if (absdiff (*ptr, *(ptr - 1)) == 1) { 
       cpl[0] = *(ptr - 1); 
       cpl[1] = *ptr; 
       printf (" coupled : %s\n", cpl); 
       ptr++; 
       continue; 
      } 
     } 
     printf(" %c = %u\n",*ptr, *ptr); 
     ptr++; 
    } 
    putchar ('\n'); 
    return 0; 
} 

如果指定字符串「my_dog_is_unable_to_bark。」將產生以下輸出:

Enter any string: my_dog_is_unable_to_bark. 

ASCII values of each characters of given string: 
m = 109 
y = 121 
_ = 95 
d = 100 
o = 111 
g = 103 
_ = 95 
i = 105 
s = 115 
_ = 95 
u = 117 
n = 110 
a = 97 
coupled : ab 
l = 108 
e = 101 
_ = 95 
t = 116 
o = 111 
_ = 95 
b = 98 
coupled : ba 
r = 114 
k = 107 
. = 46 

當然,你可以重新格式化你喜歡的任何方式的輸出,但爲了便於說明,這給了字符的好確認 - >無符號整型值。

1
#include<stdio.h> 

int main(){ 

    char str[100]=""; 
    int i, last; 

    printf("Enter any string: "); 
    scanf("%s",str+1);//top is dummy 

    printf("ASCII values of each characters of given string: "); 
    i = 1; 
    while(str[i]) 
     printf("%d ",str[i++]); 
    printf("\n"); 

    last = i; 
    for(i=1;i<last;++i){ 
     if(str[i] == str[i-1] + 1 || str[i] == str[i-1] - 1 || 
      str[i] == str[i+1] + 1 || str[i] == str[i+1] - 1) 
      printf("%c", str[i]); 
    } 
    printf("\n"); 

    return 0; 
} 
+0

爲什麼'i = 1'而不是'i = 0' for循環? – chouaib

+0

@chouaib,這樣做並不需要對第一個字符進行特殊處理。 該過程對此進行了簡化。 – BLUEPIXY