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; 
} 
+0

太多的C,没有阅读。 – LogicStuff

+1

首先将一个简单的[映射](http://en.cppreference.com/w/cpp/container/map)字符串转换为数字,然后用普通算术将连续的数字转换为数字,然后放入例如[一个矢量](http://en.cppreference.com/w/cpp/container/vector),然后你[可以排序](http://en.cppreference.com/w/cpp/algorithm/sort) 。 –

+0

好的,我会尽力谢谢!我不知道stl我会学习它虽然。但你可以告诉为什么它打印0当我使用这个cout Maneyy

零一二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; 
} 
}