在for循环中反向?

时间:2010-03-21 02:21:51

标签: c++ string gcc for-loop

基本上我得到这个for循环,我希望反向打印出的数字(例如123),所以“321”。 到目前为止它工作正常,并在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);
    }
}

3 个答案:

答案 0 :(得分:3)

再次查看for循环:

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

你正在做i=len,然后测试i>len - 除非在作业中出现严重错误,否则这将永远不会成真......

顺便说一下,虽然它没有关联,但你不应该使用gets,即使在这样的程序中你也不打算使用它。

答案 1 :(得分:1)

您不需要显式for - 循环来反转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

答案 2 :(得分:0)

您永远不会在tmp上推进索引,并且永远不会将其终止。