2015-06-21 36 views
-3

我有一個巨大的問題,我打印在控制檯反向參數,例如「./program.exe foo酒吧蘇拉」會輸出「oof rab alus」,但由於某種原因它在每一個詞「aoof arab aalus」前加上「a」,任何人都可以幫忙嗎? 這是我的代碼。C++反轉字符*增加「a」

for(int i=1;i<argc;i++){ 
    for(int j=strlen(argv[i]);j>-1;j--){ 
     cout<<argv[i][j]; 
    } 
    cout<<" "; 
} 
+0

的範圍是] strlen,0],而不是[strlen,0] – stefaanv

回答

1

陣列的最後法律指數爲size-1

例如:數組[0,1,2,3,4]與5的長度中,最後的法律指標是:4

含義,當你開始從index = strlen(...)打印字符串,你出界。
你應該改變你的第二個循環從strlen(argv[i])-1運行:

for(int i=1; i<argc; i++) { 
    for(int j=strlen(argv[i])-1; j>-1; j--) { 
     cout << argv[i][j]; 
    } 
    cout << " "; 
} 
+0

工作,謝謝^^ – DatKaspars

0

請嘗試以下

for (int i = 1; i < argc; i++) 
{ 
    for (size_t j = strlen(argv[i]); j != 0; j--) 
    { 
     cout << argv[i][j-1]; 
    } 
    cout<<" "; 
} 

標準C函數strlen有返回類型size_t。因此,最好是使用用作該類型即類型size_t

如果字符串是空的的索引的變量然後strlen將返回0。因此,內環的最可讀的條件

j != 0 

如果字符串不爲空,則執行循環。字符串長度不能爲負:)

+0

謝謝,完美工作^^ – DatKaspars

+0

你能給我某種程序,爲初學者,我發現這是最好的方式學習。 – DatKaspars

+0

@DatKaspars您可以嘗試執行本論壇中其他初學者問題中描述的任務。 –

-1

爲什麼是這樣的:

for(int i=1;i<argc;i++){ 

我想應該是這樣的,如果你想循環的所有命令:

for(int i=0;i<argc;i++) 
+0

不需要。'0th'參數是程序名。第一個參數是在索引'1'上。 – bitmask

+0

argc = 0將是程序名稱(「program.exe」)。 – DatKaspars