我需要更多的帮助。我设法将我的所有字符输入从文本文件转换为数字。 例: 从文件输入:
$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
答案 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