我有这个代码。我想要做的是用指定的数字替换每个字母的每个字母。就像A是10,依此类推,直到J,19。如果我的char数组中只有一个字母,我的代码效果很好,但是如果我有更多的字母,它会复制无用的东西。我认为strncat出了点问题。
#include<conio.h>
#include <cstring>
#include <iostream>
using namespace std;
int main()
{
char litera[11]={"ABCDEFGHIJ"};
char cifra[11]={"0123456789"};
char rezultat[256]={0};
int n;cin>>n;cin.get();
for(int i=0;i<n;i++)
{
char x[256];
cin.get(x,256);cin.get();
int k=strlen(x);
for(int j=0;j<k;j++)
{
int p = strchr(litera,x[j])-litera;
if(p>=0 )
{
strncat(rezultat, x,j);
// my p is the indicator for letter and number
strcat(rezultat,"1");
// I'm copying an 1 there because i have numbers
// between 10-19 and in my int array i have only
// the second cipher
strcpy(x,x+j);
rezultat[strlen(rezultat)]=cifra[p];
}
}
cout<<rezultat<<endl;
memset(rezultat,0,sizeof(rezultat));
}
getch();
return 0;
}
Input: 07B, 1AA, C8A
Output: 0711, 11010, 12810
我的输出: 0711 110AA1 12C810
如果你们能告诉我问题出在哪里,你会给我很多帮助,每一个建议都很受欢迎,即使不是这个问题。谢谢!
答案 0 :(得分:0)
如果允许使用矢量和字符串,那么您可以尝试以下(我测试它并且它可以工作。)这里的输入应该是逐行的(每行是要转换的新字符串)但当然你可以根据您的输入格式修改此部分:
包括:
#include <vector>
#include <iostream>
#include <string>
//#include <conio.h>
//#include <cstring>
//using namespace std;
int main()
{
int n;
std::cin >> n;
while (n--)
{
string input;
std::cin >> input;
vector<char> resultat;
for (int i = 0; i < input.size(); i++)
{
if (input.at(i) >= 'A' && input.at(i) <= 'J') // it is a letter between A and J
{
int number = input.at(i) - 'A' + 10;
char ones = (char)(((int)'0') + (number % 10));
char tens = (char)(((int)'0') + (number / 10));
resultat.push_back(tens);
resultat.push_back(ones);
}
else
resultat.push_back(input.at(i));
}
for (int i = 0; i < resultat.size(); i++)
{
std::cout << resultat[i];
}
std::cout << endl;
}
}
如果不允许使用字符串,只需使用您的字符数组。您的输入格式似乎没有任何问题。
如果不允许vector,那么你可以创建一个char指针,根据最终的大小初始化它。
例如:
int newSize=0;
for (int i = 0; i < input.size(); i++)
{
if (input.at(i) >= 'A' && input.at(i) <= 'J')
newSize+=2;
else
newSize++;
}
char* resultat = new char[newSize];
...
然后填写结果。
希望有所帮助!
答案 1 :(得分:0)
您是否必须使用多个阵列?您可以仅为指定的输入执行switch-case。由于您要用数字10-19替换字母A-J,因此您可以在开关情况下轻松实现此功能。您也可以检查输入是否错误。
如果你必须使用数组,首先要问的是你为什么数字数组是单个数字?这是约束吗?不能使用:
char cifra[11]={"10","11","12","13","14","15","16","17","18","19"};
对于数组而言,那样你可以引用数组索引并用索引替换它?这样,您可以通过使用索引引用来替换基于索引的输出来补充数组,例如A是字母数组的索引1,它引用数字数组的索引1为“10”,因此您只需打印数组索引值到变量并输出它。