您好我正在开发一个小程序来整理从文件中获取的数字。目前,我目前的难题是如何将文件中的数字作为一次一个整数或如何将它们与字符串分开。
sample input:
3 4 6 60 9 10 2 20
56 11 18
34
output:
3 4 6 60 9 10 2 20 56 11 /*prints out the first 10 numbers taken in then sorts it*/
3 4 6 9 10 11 18 20 56 60 /* after first 10 it looks at the next input then sorts it again*/
4 6 9 10 11 18 20 34 56 60
void Sortingnums(char *nums,int firsttime)
{
//holds counter and temporary number//
int i, k, temp;
//holds temporary c string//
char* wordnum;
//just take in the first ten numbers and that is it.
if(firsttime == 0)
{
wordnum = strtok(nums," ");
numbers[0] = atoi(wordnum);
//take in the first 10 numbers in the string//
for(i = 1; i < 10; i++)
{
wordnum = strtok(NULL," ");
numbers[i] = atoi(wordnum); //store the number//
}
// output the first 10 numbers//
for(i = 0; i < 10; i++)
{
cout << numbers[i] << " " << endl;
}
firsttime++;
}
while(
样本下的是我的排序算法,它接受一个cstring数组并将其拆分成由空格分隔的整数,但是我遇到的问题是前10个数字必须先打印。
我如何理清剩下的输入? (第一行输入可以有10个以上的数字)
答案 0 :(得分:0)
我正在尝试基本和简单但实际上使用C ++(和基本的C函数)。
答案 1 :(得分:0)
我建议使用标准模板库来帮助您控制数字和排序。此外,我不确定数字2和3在你的示例输出行中的位置...我假设这是一个错字,你不需要从排序的向量中删除这些数字由于某种原因。
无论如何,我会做这样的事情:
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
bool mySort(int i, int j)
{
return (i < j);
}
void printVector(vector<int> &v)
{
for (int i = 0; i < v.size(); i++)
cout << v[i] << " ";
cout << endl;
}
void getNumbers(string &strNums)
{
ifstream file("input.txt");
string line;
if (file.is_open())
{
while (file.good())
{
getline(file, line);
strNums += line + " ";
}
file.close();
}
}
void sortAndPrintNumbers(char *input)
{
vector<int> vNums, vNumsSorted;
char * strNum = strtok(input, " ");
if (strNum)
vNums.push_back(atoi(strNum));
while (strNum)
{
strNum = strtok(NULL, " ");
if (strNum)
vNums.push_back(atoi(strNum));
}
// Get first 10 numbers, print them, then sort.
for (int i = 0; i < 10 && i < vNums.size(); i++)
vNumsSorted.push_back(vNums[i]);
printVector(vNumsSorted);
sort(vNumsSorted.begin(), vNumsSorted.end(), mySort);
for (int i = 10; i < vNums.size(); i++)
{
vNumsSorted.push_back(vNums[i]);
sort(vNumsSorted.begin(), vNumsSorted.end(), mySort);
printVector(vNumsSorted);
}
cout << endl;
}
int main()
{
string strNums;
getNumbers(strNums);
char * pNums = new char[strNums.size() + 1];
strcpy(pNums, strNums.c_str());
sortAndPrintNumbers(pNums);
delete [] pNums;
}
在字符数组和字符串之间交换有点混乱,但我不确定你是否想要使用Boost或只是想看到strtok解决方案。此外,您可以指定仅要排序的矢量项的范围,因此更优雅的解决方案可以利用它。
干杯