C++将一个两个三个文本转换为123,将一个二个文件转换为一个二个文件,并将它们排序为12 123
问题描述:
将一个两个三个文本转换为123,将一个二个文件转换为12并将它们排序为12 123我从包含这个输入的文件中获取输入.i得到了它们的打印,但我无法对它们进行排序..我使用atoi函数将其转换为数字,然后打印0.请帮助。C++将一个两个三个文本转换为123,将一个二个文件转换为一个二个文件,并将它们排序为12 123
一二三
五七
零一二
三个二一个
#include<iostream>
#include<string.h>
#include<fstream>
#include <stdlib.h>
using namespace std;
int findno(char * a);
ifstream fin;
int i=0,k=0,j=0,count=0,s=0;
char ar[100],ch,str[100],no[100][100];
int main(int argc,char * argv[])
{
fin.open(argv[1]);
fin.getline(ar,100);
while(i<strlen(ar))
{
if(ar[i]!=' ')
{
str[k++]=ar[i];
i++;
if(i==strlen(ar))
{
fin.getline(ar,100);
no[s][j++]=findno(str);
cout<<(int)no[s][j-1]<<"\n";
i=0;
k=0;
j=0;
s++;
}
continue;
}
if(ar[i]==' ')
{
no[s][j++]=findno(str);
cout<<(int)no[s][j-1];
i++;
k=0;
}
}
cout<<atoi(no[0])<<" ";
fin.close();
return 0;
}
int findno(char * a)
{
if(a[0]=='z')
return 0;
if(a[0]=='o')
return 1;
if(a[0]=='t' && a[1]=='w')
return 2;
if(a[0]=='t' && a[1]=='h')
return 3;
if(a[0]=='f' && a[1]=='o')
return 4;
if(a[0]=='f' && a[1]=='i')
return 5;
if(a[0]=='s' && a[1]=='i')
return 6;
if(a[0]=='s' && a[1]=='e')
return 7;
if(a[0]=='e')
return 8;
if(a[0]=='n')
return 9;
}
答
零一二12
您可以使用标志信号传递关于呈现非零字符的信息,例如下面的示例。在读下一个单词之前将flag设置为false,如果发现某个非零字符,则将其设置为true。
bool flag = false;
int tmp;
while(i<strlen(ar))
{
if(ar[i]!=' ')
{
str[k++]=ar[i];
i++;
if(i==strlen(ar))
{
fin.getline(ar,100);
tmp=findno(str);
if (flag || (tmp > 0))
{
no[s][j++] = tmp;
cout << tmp <<"\n";
}
i=0;
k=0;
j=0;
flag = false;
s++;
}
continue;
}
if(ar[i]==' ')
{
tmp=findno(str);
if (tmp > 0)
flag = true;
if (flag)
{
no[s][j++] = tmp;
cout << tmp;
}
i++;
k=0;
}
}
太多的C,没有阅读。 – LogicStuff
首先将一个简单的[映射](http://en.cppreference.com/w/cpp/container/map)字符串转换为数字,然后用普通算术将连续的数字转换为数字,然后放入例如[一个矢量](http://en.cppreference.com/w/cpp/container/vector),然后你[可以排序](http://en.cppreference.com/w/cpp/algorithm/sort) 。 –
好的,我会尽力谢谢!我不知道stl我会学习它虽然。但你可以告诉为什么它打印0当我使用这个cout Maneyy