我在D盘中有一个名为“data.txt”的文本文件。它有几个列和行,如:
A B A B V B
B V A B A A
B B A A B A
我想读取“program.txt”文件,然后将其转换为数字,例如A = 1,B = 2,V = 3,然后将其写入以使其成为数字数组。但我不知道从哪里开始。有人能指出我正确的方向吗?
#include <stdio.h>
int main() {
int n,k;
char C;
FILE *fptr;
fptr=fopen("D:\\program.txt","r+");
printf("Enter n: ");
scanf("%d",&n);
if (n == C){
fprintf(fptr,"%d",3);
}
fclose(fptr);
return 0;
}
答案 0 :(得分:1)
根据您的问题,您似乎想在遇到每个角色时为其分配一个新号码。因此,您需要跟踪您所看到的内容以及分配的号码以及当前号码。
您可以使用数组执行此操作:
int values[256] = {0};
int next_value = 1;
当您阅读角色时,您可以检查您是否已经看过它。您可能还想检查它是否在正确的范围内。如果您还没有看到它,请指定一个号码。否则使用最初分配的号码:
if (c >= 'A' && c <= 'Z') {
if (!values[c]) values[c] = next_value++;
printf ("%d", values[c]);
}
然后它只是阅读文件的问题。有很多方法可以做到这一点,但我认为在这种情况下最简单的方法是在循环中读取文件中的每个字符,并在翻译您感兴趣的字符后输出它们:
int c;
while (EOF != (c = getc(fp))) {
if (c >= 'A' && c <= 'Z') {
if (!values[c]) values[c] = next_value++;
printf ("%d", values[c]);
} else {
putchar(c);
}
}
答案 1 :(得分:0)
#include <stdio.h>
int main() {
char line_buff[16];
FILE *fptr;
fpos_t pos;
fptr=fopen("D:\\program.txt","r+");
fgetpos(fptr, &pos);
while(fgets(line_buff, sizeof(line_buff), fptr)){//read one line
char *p = line_buff;
while(*p){//convert
if(*p == 'A')
*p++ = '1';
else if(*p == 'B')
*p++ = '2';
else if(*p == 'V')
*p++ = '3';
else
++p;
}
fsetpos(fptr, &pos);
fprintf(fptr, "%s", line_buff);//rewrite
fflush(fptr);
fgetpos(fptr, &pos);//memo position
}
fclose(fptr);
return 0;
}