2010-03-21 108 views
2

基本上我得到了這個循環,我想輸入的數字(例如123)被打印出來,所以「321」。 到目前爲止,它工作正常,並打印出正確的順序在for循環在for循環中反向?

for(i = 0; i<len ; i++) 

,但我得到一個錯誤,當我嘗試打印反向?發生什麼事了?

#include <stdio.h> 
#include <string.h> 
void cnvrter(char *number); 

int main(){ 
    char number[80]; 
    printf("enter a number "); 
    gets(number); 
    cnvrter(number); 

    return 0; 
} 

void cnvrter(char *number){ 
    char tmp[80]; 
    int i = 0,len = 0; 
    int cnvrtd_digit = 0; 
    len = strlen(number); 
    printf("\nsize of input %d\n",len); 
    for(i = len; i>len ; i--){ 
     if ((number[i] >= '0') && (number[i]<='9')){ 
      tmp[0] = number[i]; 
      sscanf(tmp,"%d",&cnvrtd_digit); 

     } 
     printf("%d\n",cnvrtd_digit); 
    } 
} 
+0

誤差爲它編譯但崩潰。 – silent 2010-03-21 02:22:52

回答

3

for循環再看看:

for(i = len; i>len ; i--){ 

你這樣做i=len,然後測試了i>len - 除非某事在分配嚴重的錯誤,這是永遠不會是真的...

順便說一下,雖然它沒有關係,但是不應該使用gets,即使在這樣的程序中,您從來沒有打算認真使用它。

+0

嗯,當我用(我= len; i> = 0;我 - )我得到0321打印出來。爲什麼這個0出現? – silent 2010-03-21 02:40:24

+1

在C和C++中,數組索引從0開始,因此對於長度爲3的字符串,最大有效索引爲2. – 2010-03-21 02:45:06

+0

ahh歡呼!非常感謝你 – silent 2010-03-21 02:51:29

0

您永遠不會在tmp上推進索引,並且您永遠無法終止它。

1

您不需要明確的for -loop來反轉C++中的字符串。您可以使用std::reverse()str.rbegin(), str.rend()

// -*- coding: utf-8 -*- 
// $ g++ *.cc && (echo 'abc1d23e->١<-_ f999fff' | ./a.out) 
#include <algorithm> // remove_copy_if 
#include <functional> // not1 
#include <iostream> 
#include <iterator> // ostream_iterator 
#include <string> 

int main() { 
    using namespace std; 

    cout << "enter a number " << flush;    // print prompt 
    string str; cin >> str;       // read until first space 
    cout << "\nsize of input " << str.size() << endl; 

    remove_copy_if(
     str.rbegin(), str.rend(),      // traverse in reverse order 
     ostream_iterator<string::value_type>(cout, "\n"), // copy to stdout 
                 // separated by newline 
     not1(ptr_fun((int (*)(int))isdigit)));  // remove non-digits 
} 

運行:

$ g++ *.cc && (echo 'abc1d23e->١<-_ f999fff' | ./a.out) 
enter a number 
size of input 15 
3 
2 
1