gpt4 book ai didi

c - 在 C 中从文本文件中分割和修改字符串

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

在一个学校项目中,我正在制作凯撒密码。我必须满足的要求如下:我需要从文本文件中读取文本,将其存储到二维字符串数组中,每行最多 81 个字符(80 个有用 + '\0')和 1000 行,然后修改内容以对其进行加密或解密。如果文件中的单行文本包含超过 80 个有用字符怎么办?我考虑过以这样的方式读取它:它读取的每个空格都会将其转换为“\0”并更改数组中的行,但我不知道是否可以使用 fgets 来完成此操作,而不是像我那样使用 fgetc .

这就是我现在拥有的:

int lerficheiro(char * texto[MAXLINHAS][MAXCARPORLINHA])
{
char caractere;
FILE * fp;
fp = fopen("tudomaiusculas.txt", "r");
if(fp==NULL)
{
printf("Erro ao ler ficheiro.");
return (-1);
}
for(int linha = 0; linha < MAXLINHAS; linha++)
{
for(int coluna = 0; coluna < MAXCARPORLINHA; coluna++)
{
caractere = fgetc(fp);
if(caractere == ' ') caractere = '\0'; break;
if(caractere == '\n') caractere = '\0'; break;
if(caractere < 'A' || caractere > 'Z')
{
printf("Erro ao ler, o ficheiro não contem as letras todas
maiusculas");
return (-1);
}
* texto[linha][coluna] = caractere;
}
}
}

最佳答案

将数组初始化为 0,并利用 fgets 选择要读取的字节数这一事实。只需检查 fgets 的返回值即可查看是否已到达文件末尾。
另请注意,您不需要将结果数组作为指针,因为数组已经是指针(编辑镜像@user3629249建议)EDIT2:编辑代码以考虑换行问题。 Alo 删除了导致 79 个字符行而不是 80 个的 -1

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

#define MAX_LINES 8000
#define HSIZE 81

int parse_file( FILE * inp_file, char res[MAX_LINES][HSIZE])
{
int l = 0;
int len = HSIZE;
while( fgets( res[l]+(HSIZE-len), len, inp_file ))
{
len = HSIZE - strlen( res[l]);
if( len <= 1)
{
l++;
len = HSIZE;
}
}
}

int main()
{
char parsed_file[MAX_LINES][HSIZE] = {0};

FILE * inp_file;

inp_file = fopen( "file_to_parse.txt", "r");
if( inp_file == NULL)
{
printf( "Failed to read input file...\n");
return 1;
}

parse_file( inp_file, parsed_file);

fclose( inp_file);

for( int i=0; parsed_file[i][0] != 0; i++)
printf( "line %04d: %s\n", i+1,parsed_file[i]);

return 0;
}

如果您愿意,也可以用类似的内容替换 parsed_file 中的新行

char *pos;
while( (pos = strchr( line, '\n'))
*pos = ' ';

带有测试文件:

This is a random file that I'm testing out for the pure randomness of random files.
Still reading, m'kay man lets get going!!!!!!!!!!! So last day the craziest thing happened, let me tell you about it....

和输出

line 0001: This is a random file that I'm testing out for the pure randomness of random fil
line 0002: es.
Still reading, m'kay man lets get going!!!!!!!!!!! So last day the craziest
line 0003: thing happened, let me tell you about it....

请注意 printf 仍会打印换行符

关于c - 在 C 中从文本文件中分割和修改字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53676956/

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