将单独的数字转换为一个整数C ++

时间:2014-02-26 19:38:23

标签: c++ ascii

我需要更多的帮助。我设法将我的所有字符输入从文本文件转换为数字。 例: 从文件输入:

$1,9,56#%34,9
!4.23#$4,983

输出:

1956
349
423
4983

现在,我需要将这些个别数字取为1 9 5 6并将其作为整数读取。输出看起来一样,但它们实际上是整数。合理?我必须在我的外循环中执行此操作。它也必须是一个EOF循环。所以,我知道我需要取第一个数字并乘以10然后加上下一个数字然后将所有数字乘以10直到我到达最后一个数字。如何以有效的非崩溃方式编写它? input.txt文件具有上述输入。 这就是我到目前为止...... 非常感谢任何帮助

/*
 */

 //Character Processing Algorithm

 #include <fstream>
 #include <iostream>
 #include <cctype>                                                                                                                         
 using namespace std;

 char const nwln = '\n';

  int main ()
   {
     ifstream data;
     ofstream out;
     char ch;
     char lastch;
     int sum;

     data.open ("lincoln.txt"); //file for input
     if (!data)
        {
        cout << "Error!!! Failure to Open lincoln.txt" << endl;
        system ("pause");
        return 1;
        }
     out.open ("out.txt"); //file for output
     if (!out)
        {
        cout << "Error!!! Failure to Open out.txt" << endl;
        system ("pause");
        return 1;
        }

     data.get (ch); // priming read for end-of-file loop

     while (data)
           {
           sum = 0;
           while ((ch != nwln) && data)
                 {
                 if (isdigit(ch))
                    out<<ch;

                 if (ch == '#')
                    out<<endl;
                 {
                 ;
                 }

                                  lastch = ch;
                 data.get (ch); // update for inner loop
                 } // inner loop
                 if (lastch != '#')
                     out<<endl;



              data.get (ch); // update for outer loop

           } //outer loop

     cout << "The End..." << endl;
     data.close (); out.close ();
     system ("pause");
     return 0;
     } //main

2 个答案:

答案 0 :(得分:1)

如果您只需输出标准流std :: cout中的所有数字(或某些其他流,例如文件),那么您可以使用以下代码作为示例。我只在变量行中替换了std :: cin输入的文件输入。您可以使用文件输入而不是标准流。 而不是

std::ostream_iterator<char>( std::cout ),

使用

std::ostream_iterator<char>( out ),

而不是

std::cout << std::endl;

使用

out << std::endl;
std::copy_if电话之后

以下是示例

#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <algorithm>
#include <cctype>

int main()
{
    std::string line;

    while ( std::getline( std::cin, line) )  // instead of std::cin use data
    {
//      std::cout << line << std::endl;

        std::string word;
        std::istringstream is( line );

        while ( std::getline( is, word, '#' ) )
        {
//          std::cout << word << std::endl;
            auto it = std::find_if( word.begin(), word.end(),
                                    []( char c ) { return ( std::isdigit( c ) ); } );
            if ( it != word.end() )
            {
                std::copy_if( it, word.end(), 
                              std::ostream_iterator<char>( std::cout ),
                              []( char c ) { return ( std::isdigit( c ) ); } );
                std::cout << std::endl;
            }
        }
    }
}

测试输入数据

$1,9,56#%34,9
!4.23#$4,983

输出

1956
349
423
4983

或者您可以在使用lambda之前定义它。

#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <algorithm>
#include <cctype>

int main()
{
    std::string line;

    while ( std::getline( std::cin, line) )  // instead of std::cin use data
    {
//      std::cout << line << std::endl;

        std::string word;
        std::istringstream is( line );

        while ( std::getline( is, word, '#' ) )
        {
//          std::cout << word << std::endl;

            auto lm_IsDigit = []( char c ) { return ( std::isdigit( c ) ); };

            auto it = std::find_if( word.begin(), word.end(), lm_IsDigit );

            if ( it != word.end() )
            {
                std::copy_if( it, word.end(), 
                              std::ostream_iterator<char>( std::cout ),
                              lm_IsDigit );
                std::cout << std::endl;
            }
        }
    }
}

答案 1 :(得分:0)

逐个字符地读取输入文件。要检查字符是否为数字,请使用std::isdigit。然后将数字添加到字符串的后面。

如果您需要将字符串转换为整数,请使用std::stoi