gpt4 book ai didi

c - C语言中整数数组转字符串

转载 作者:行者123 更新时间:2023-11-30 19:10:30 25 4
gpt4 key购买 nike

假设我有一个带有 ascii 值的整数数组。

int stringAscii = {"072", "101", "108", "108", "111", "032", 
"087", "111", "114", "108", "100"};

我想将 ascii 值转换为字符并将它们组合成一个字符串:

char *string = stringAsciiToString(stringAscii);

printf("Output -> '%s'", string);

//输出 -> 'Hello World'

你会如何制作这样的功能?这是我到目前为止所得到的;

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

long int p,q,n,t,flag,e[100],d[100],temp[100],j,m[100],en[100],i;
char msg[100];
int prime(long int);
void ce();
long int cd(long int);
void encrypt();
void decrypt();

int main()
{
p = 53;
q = 61;
printf("\nENTER MESSAGE\n");
fflush(stdin);
scanf("%s",msg);

for(i=0;msg[i]!=NULL;i++)
m[i]=msg[i];
n=p*q;
t=(p-1)*(q-1);
ce();

encrypt();
decrypt();

strcpy(msg, "");

for(i=0;en[i]!=-1;i++) {
strcpy(msg, concat(msg, en[i]));
}

printf("%s", msg);

return 0;
}

char* concat(const char *s1, const char *s2) {
char *result = malloc(strlen(s1)+strlen(s2)+1); //+1 for the zero-terminator
strcpy(result, s1);
strcat(result, s2);
return result;
}

int prime(long int pr)
{
int i;
j=sqrt(pr);
for(i=2;i<=j;i++)
{
if(pr%i==0)
return 0;
}
return 1;
}

void ce()
{
int k;
k=0;
for(i=2;i<t;i++)
{
if(t%i==0)
continue;
flag=prime(i);
if(flag==1&&i!=p&&i!=q)
{
e[k]=i; flag=cd(e[k]);
if(flag>0)
{
d[k]=flag;
k++;
}
if(k==99)
break;
}
}
}

long int cd(long int x)
{
long int k=1;
while(1)
{
k=k+t;
if(k%x==0)
return(k/x);
}
}

void encrypt()
{
long int pt,ct,key=e[0],k,len;
i=0;
len=strlen(msg);
while(i!=len)
{
pt=m[i];
pt=pt-96;
k=1;
for(j=0;j<key;j++)
{
k=k*pt;
k=k%n;
}
temp[i]=k;
ct=k+96;
en[i]=ct;
i++;
}
en[i]=-1;
printf("\nTHE ENCRYPTED MESSAGE IS\n");
for(i=0;en[i]!=-1;i++)
printf("%c",en[i]);
}

void decrypt()
{
long int pt,ct,key=d[0],k;
i=0;
while(en[i]!=-1)
{
ct=temp[i];
k=1;
for(j=0;j<key;j++)
{
k=k*ct;
k=k%n;
}
pt=k+96;
m[i]=pt;
i++;
}
m[i]=-1;
printf("\nTHE DECRYPTED MESSAGE IS\n");
for(i=0;m[i]!=-1;i++)
printf("%c",m[i]);
}

最佳答案

假设您的 stringAscii 数组是:

int stringAscii[] = {72, 101, 108, 108, 111, 32, 
87, 111, 114, 108, 100};

而不是:

int stringAscii = {"072", "101", "108", "108", "111", "032", 
"087", "111", "114", "108", "100"};

这是不正确的,原因有两个:

  • 您需要将 stringAscii[] 作为数组名称。
  • 不能将字符串 "" 值作为整数数组的成员。这就是 C 中的类型冲突。

您可以使用mallocchar *string动态分配空间。 ,并将您的 ascii 整数值一次添加到动态数组中。

您可以free末尾所要求的空间。

这样的事情将帮助您开始:

#include <stdio.h>
#include <stdlib.h>

char *stringAsciiToString(int stringAscii[], const size_t size);

int
main(int argc, char *argv[]) {
int stringAscii[] = {72, 101, 108, 108, 111, 32,
87, 111, 114, 108, 100};

const size_t size = sizeof(stringAscii)/sizeof(*stringAscii);

char *string = stringAsciiToString(stringAscii, size);

printf("Output -> '%s'\n", string);

free(string);

return 0;
}

char
*stringAsciiToString(int stringAscii[], const size_t size) {
int i, slen = 0;

char *string = malloc((size+1) * sizeof(*string));
if (!string) {
printf("Cannot allocate memory\n");
exit(EXIT_FAILURE);
}

for (i = 0; i < size; i++) {
string[slen++] = stringAscii[i];
}
string[slen] = '\0';

return string;
}

此处输出:Demo

关于c - C语言中整数数组转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41143070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com