C++ c++;用数字替换字符
我有这个密码。我想做的是用指定的数字替换每个字符中的每个字母。比如A是10,以此类推直到J,19。如果我的char数组中只有一个字母,那么我的代码工作得很好,但是如果我有更多的字母,那么它会复制无用的东西。我认为strncat有问题C++ c++;用数字替换字符,c++,arrays,string,C++,Arrays,String,我有这个密码。我想做的是用指定的数字替换每个字符中的每个字母。比如A是10,以此类推直到J,19。如果我的char数组中只有一个字母,那么我的代码工作得很好,但是如果我有更多的字母,那么它会复制无用的东西。我认为strncat有问题 #include<conio.h> #include <cstring> #include <iostream> using namespace std; int main() { char litera[11]={"A
#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
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符[11]={“ABCDEFGHIJ”};
字符cifra[11]={“0123456789”};
char rezultat[256]={0};
int n;cin>>n;cin.get();
对于(int i=0;i如果允许使用向量和字符串,那么您可以尝试以下方法(我测试了它,它可以工作。)这里的输入应该是逐行的(每行都是要转换的新字符串),但当然您可以根据您的输入格式修改此部分:
包括:
#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;
}
}
#包括
#包括
#包括
//#包括
//#包括
//使用名称空间std;
int main()
{
int n;
标准:cin>>n;
而(n--)
{
字符串输入;
std::cin>>输入;
向量结果;
对于(int i=0;i 如果(input.at(i)>='A'&&input.at(i)您必须对多个数组执行此操作吗?您可以仅对指定的输入执行切换情况。由于您将字母A-J替换为数字10-19,因此您可以在切换情况下轻松实现此操作。您还可以检查输入是否错误
如果必须使用数组,第一个问题是为什么要用数字数组来表示单个数字?这是约束条件吗?您不能使用:
char cifra[11]={"10","11","12","13","14","15","16","17","18","19"};
相反,对于数组,您可以引用数组索引并使用索引替换它?这样,您可以通过仅使用索引引用替换基于索引的输出来补充数组,例如字母数组的索引1是指数值数组的索引1,即“10”因此,您只需将数组索引值打印到一个变量并将其输出。尝试过,但在n初始化后,如果没有cin.get();它将无法工作。感谢您的提示,但结果是一样的。我现在正在查看您的循环。很快就会回来!谢谢,我很感激您通过:int p=strchr(litera,x[j])尝试实现的目标-litera;??strchr给出一个指针,指向循环中每个字符的第一次出现。例如,如果litera数组中不再有字符,p将是0或垃圾值,并且不进入if(p)循环。我想我的字符数组中的字符永远不会被删除,我不知道
char cifra[11]={"10","11","12","13","14","15","16","17","18","19"};