C++ c++;在一个文件中转换文本,如123123和12312,并按12312排序
将文本转换为文件中的12312和12312,并将其排序为12312。我正在从包含此输入的文件中获取输入。我打印了这些文本,但无法对其排序。我使用atoi函数将其转换为数字,但它会打印0。请帮忙 一二三 五七 零一二 三二一C++ c++;在一个文件中转换文本,如123123和12312,并按12312排序,c++,string,numbers,C++,String,Numbers,将文本转换为文件中的12312和12312,并将其排序为12312。我正在从包含此输入的文件中获取输入。我打印了这些文本,但无法对其排序。我使用atoi函数将其转换为数字,但它会打印0。请帮忙 一二三 五七 零一二 三二一 #include<iostream> #include<string.h> #include<fstream> #include <stdlib.h> using namespace std; int findno(char *
#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int findno(字符*a);
流鳍;
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[])
{
财务公开(argv[1]);
财务指标(ar,100);
而
零一二等于十二
您可以使用关于显示非零字符或不显示非零字符的标志信号,如下例所示。在读取下一个单词之前,将标志设置为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;
}
}
bool标志=false;
int tmp;
而(i)(0)
{
否[s][j++]=tmp;
C太多了,没有读过。首先是简单的字符串到数字,然后是普通的算术,将连续的数字转换成数字,然后输入例如。然后,你可以学习如何使用调试器,这将是非常宝贵的。因为有了调试器,你可以逐行检查代码,同时观察变量的值s、 看看代码到底做了什么。@JoachimPileborg:从12
在123
之前排序这一事实来看,我们仍然无法判断是按字典还是按数字排序。@Maneyy:永远不要使用atoi
。不仅没有可靠的方法来检测失败的解析,有些失败还会导致未定义的行为。Get习惯于使用strtol
。