2015-09-13 59 views
0

我在C中有一個字符串,我需要爲字符串中的每個字符添加+1。例如,我想要abc def成爲bcd efg。我想運行它作爲abc def | ./myprog向C語言的ascii字符串添加數字

這是我的代碼,我似乎無法找出問題所在:

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

int main (int argc, char *argv[]) { 
    char stringline[200]; 
    char result[200]; 
    int lengthofstr; 
    int i; 

    scanf("%s", &stringline); 
    lengthofstr = strlen(stringline); 
    for(i=0; i < stringline; i++) { 
     stringline[i] = (stringline[i] + 1); 
    } 
    printf("%s", stringline); 

    return 0; 
} 
+0

您或許可以解釋的問題是什麼:什麼輸出沒有你期望,而你取得了什麼? –

+1

'abc def | 。/ myprog'將嘗試執行一個名爲'abc'的程序,其參數爲'def',並將*輸出*輸入到'。/ myprog'中。即使您的程序完美運行,我也不認爲這就是您想要做的。 –

+0

也許把你的字符串添加到一個文件中,然後在你的程序中輸入'cat file'。 –

回答

1

看起來像一個典型的錯字。更換

for(i=0;i<stringline;i++){ 

for(i=0;i<lengthofstr;i++){ 
+1

使用錯誤的變量不是拼寫錯誤;拼寫錯誤將是一個錯字。 –

+1

@ScottHunter這取決於。至於我按's'鍵而不是'l'和'Ctrl + Space',那麼它就是一個錯字:) –

0

與字符串的長度進行比較,而不是與你的指針進行比較陣列本身

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

int main (int argc, char *argv[]){ 
    char stringline[200]; 
    int lengthofstr; 
    int i; 

    scanf("%199s", &stringline); 
    lengthofstr = strlen(stringline); 
    for(i=0;i<lengthofstr;i++){  // Modify HERE 
     stringline[i] = (stringline[i] + 1); 
    } 
    printf("%s", stringline); 

    return 0; 
} 

這將永遠是真實的

+0

另外,'result'沒有被使用。 –

+0

另外,'%s'可能導致緩衝區溢出。改用'%199s'。 –

0

而不是複雜的邏輯與scanf和格式說明符,如果是字母字符,則可以從stdin一次讀取一個字符,並添加'1'。嘗試:

#include <stdio.h> 

#define MAXC 200 

int main (void) { 

    int c; 
    int idx = 0; 
    char result[MAXC] = {0}; 

    while ((c = getchar()) != '\n' && c != EOF && idx < MAXC) { 
     if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')) c++; 
     result[idx++] = c; 
    } 

    printf ("\n result: %s\n\n", result); 

    return 0; 
} 

輸出

$ echo "abc def" | ./bin/stdinplus1 

result: bcd efg 

它也有讓非A-Za-z字符的好處不變:

$ echo "abc/def*g = hij" | ./bin/stdinplus1 

result: bcd/efg*h = ijk