2017-09-18 82 views
0

我目前正在嘗試完成用戶輸入兩個5位長數字的代碼。代碼然後檢查兩個數字在同一地點是否有相同的數字,並顯示兩個輸入的同一地點有多少個相同的數字。 (例如比較56789和94712會有一個相似的數字,第三位數字是7)。到目前爲止,我已經能夠將輸入分解成每個點的數字,我只需要幫助比較它們。最初我以爲我可以創建一個int作爲計數器,並且在數字相同時使用模數或分數來輸出1,但我一直無法將輸出1或0的公式放在一起,具體取決於if這些數字是否相同。比較兩個輸入的數字以查看它們是否相同

+3

配方?像'a == b'? –

+2

我會將輸入視爲字符串並逐個比較它們。不要以爲你通過將輸入轉換爲'int's – yano

+0

在最後幾天的類似問題中獲得了很多,這個任務是什麼? –

回答

1

想你知道字符串n的長度(作爲一個條件,你會需要它們是相等的,如果他們在長度需要其他驗證不同)

//n is the length of string 
for(int i=0;i<n;i++) 
{ 
    if(string1[i]==string2[i]) 
    { 
     //do something, make a counter that increments here... 
     //also save index i, so you can tell the position when a match occured 
    }else 
    { 
     //do something else if you need to do something when chars didnt match 
    } 
} 

在這裏,你當i=0,您比較string1[0]string2[0],當i=1,你比較string1[1]string2[1]等等.....

1

我建議你閱讀這兩個字符串或轉換爲字符串,如果你有能力。從那裏,它是一個簡單的字符串比較計數器。事情是這樣的:

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

int is_numeric(char *str) 
{ 
    while (*str) 
     if (!isdigit(*str++)) 
      return (0); 
    return (1); 
} 

int main(void) 
{ 
    char num1[32]; 
    char num2[32]; 
    int  count = 0; 

    printf("Digit 1\n>> "); 
    if (scanf("%5s", num1) != 1 || !is_numeric(num1)) 
     return (0); 
    printf("Digit 2\n>> "); 
    if (scanf("%5s", num2) != 1 || !is_numeric(num2)) 
     return (0); 
    if (strlen(num1) != 5 || strlen(num2) != 5) 
     return (0); 
    for (int i=0; i<5; ++i) 
     if (num1[i] == num2[i]) 
      ++count; 
    printf("%d\n", count); 
    return (0); 
} 
-1

您可以使用模(%)除以(/)做到這一點很容易。首先你要做% 10以獲得最低有效位並進行比較。然後你做/ 10刪除最不重要的數字。像:

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

int main(void) { 
    unsigned int i1, i2; 
    int i; 
    int cnt = 0; 
    printf("Input first 5 digit number:\n"); 
    if (scanf(" %u", &i1) != 1 || i1 < 10000 || i1 > 99999) // Get integer input and check the range 
    { 
     printf("input error\n"); 
     return 0; 
    } 

    printf("Input second 5 digit number:\n"); 
    if (scanf(" %u", &i2) != 1 || i2 < 10000 || i2 > 99999) // Get integer input and check the range 
    { 
     printf("input error\n"); 
     return 0; 
    } 

    for (i=0; i<5; ++i) 
    { 
     if ((i1 % 10) == (i2 % 10)) ++cnt;  // Compare the digits 
     i1 = i1/10; 
     i2 = i2/10; 
    } 
    printf("Matching digits %d\n", cnt); // Print the result 
    return 0; 
} 

它也可以使用字符串來完成。將輸入讀取爲unsigned int,然後使用snprintf將該值轉換爲字符串,最後逐個字符比較兩個字符串。

喜歡的東西:

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

int main(void) { 
    char str1[32]; 
    char str2[32]; 
    unsigned int i1, i2; 
    int i; 
    int cnt = 0; 
    printf("Input first 5 digit number:\n"); 
    if (scanf(" %u", &i1) != 1)    // Get integer input 
    { 
     printf("input error\n"); 
     return 0; 
    } 
    snprintf(str1, 32, "%u", i1); 
    if (strlen(str1) != 5)     // Convert to string 
    { 
     printf("input error - not 5 digits\n"); 
     return 0; 
    } 

    printf("Input second 5 digit number:\n"); 
    if (scanf(" %u", &i2) != 1)    // Get integer input 
    { 
     printf("input error\n"); 
     return 0; 
    } 
    snprintf(str2, 32, "%u", i2);     // Convert to string 
    if (strlen(str2) != 5) 
    { 
     printf("input error - not 5 digits\n"); 
     return 0; 
    } 


    for (i=0; i<5; ++i) 
    { 
     if (str1[i] == str2[i]) ++cnt;  // Compare the characters 
    } 
    printf("Matching digits %d\n", cnt); // Print the result 
    return 0; 
} 

的理由採取輸入到unsigned int,而不是直接的字符串是通過這樣做,我沒有檢查該字符串實際上是有效的數字(如用戶類型12W34)。 scanf爲我做了。

+0

不要將原始輸入,char *轉換爲數字數據類型,然後返回char *以進行分析。調用'scanf(%u)'希望轉換爲一個字符串比測試一個字符串以確保所有字符都是數字更有效。 – 0x11

+0

@ 0x11 - 更多工作?對於你還是處理器?對於從stdin性能中獲取用戶輸入的程序很少會遇到問題。嘗試用直接字符串輸入編寫完整的程序,並進行所有需要的檢查。你有一個更短的程序? – 4386427

相關問題