C 中的文件处理 在输入的输出中打印出反向字符串
File Handling in C Print out the reverse String in the output from the input
好的,所以我在 C 中的文件处理和字符串方面遇到了很多问题。此任务的重点是从输出中反转字符串并将小写字母转换为大写字母,反之亦然。例如,我必须从飞机上获得 ENALPOREa 的输出。我必须有 2 个文件。我在其中编写了 Airplane 的输入文件和在其中获得 ENALPOREa 的输出文件。感谢您的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inputOfAString(const char*nameOfTheFile){
FILE *fin = fopen(nameOfTheFile,"w");
if(fin == NULL){
printf("Error");
exit(1);
}
char s[20];
fgets(s,20,stdin);
fprintf(fin,"%s",s);
fclose(fin);
}
void readTheString(const char *inputOfTheFile,const char*outputOfTheFile){
FILE *fout = fopen(outputOfTheFile,"w");
FILE *fin = fopen(inputOfTheFile,"r");
if(fout == NULL || fin == NULL){
printf("Error");
exit(1);
}
char s[20];
while(!feof(fin)){
fgets(s,20,inputOfTheFile);
for(int i = 0;i<20;i++){
if(s[i] == isupper(s[i])){
s[i] = tolower(s[i]);
}else{
s[i] = tolower(s[i]);
}
}
fputs(s,fout);
}
fclose(fout);
fclose(fin);
}
int main(){
inputOfAnString("input1.txt");
readTheString("input1.txt","output1.txt");
return 0;
}
测试fgets()
的结果,而不是feof()
。
(无论文本或讲师建议什么 feof()
- 怀疑对待)。
使用isupper()
的结果作为T/F测试。
一个分支应该使用toupper()
迭代到字符串末尾,可能小于20
char s[20];
//while(!feof(fin)){
// fgets(s,20,inputOfTheFile);
while(fgets(s, sizeof s, inputOfTheFile)) {
// for(int i = 0; i < 20;i++){
for(int i = 0; s[i];i++){
// if(s[i] == isupper(s[i])){
if(isupper(s[i])){
s[i] = tolower(s[i]);
}else{
//s[i] = tolower(s[i]);
s[i] = toupper(s[i]);
}
}
fputs(s,fout);
}
高级:使用 unsigned char
避免调用带有负值的 is...(), to...()
。
紧的选择
#define S_SIZE 20
char s[S_SIZE];
while (fgets(s, sizeof s, inputOfTheFile)) {
const unsigned char *p = (const unsigned char *) s;
while (*p) {
if(isupper(*p)) {
*p = tolower(*p);
} else {
*p = toupper(*p);
}
p++;
}
fputs(s, fout);
}
好的,所以我在 C 中的文件处理和字符串方面遇到了很多问题。此任务的重点是从输出中反转字符串并将小写字母转换为大写字母,反之亦然。例如,我必须从飞机上获得 ENALPOREa 的输出。我必须有 2 个文件。我在其中编写了 Airplane 的输入文件和在其中获得 ENALPOREa 的输出文件。感谢您的帮助!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inputOfAString(const char*nameOfTheFile){
FILE *fin = fopen(nameOfTheFile,"w");
if(fin == NULL){
printf("Error");
exit(1);
}
char s[20];
fgets(s,20,stdin);
fprintf(fin,"%s",s);
fclose(fin);
}
void readTheString(const char *inputOfTheFile,const char*outputOfTheFile){
FILE *fout = fopen(outputOfTheFile,"w");
FILE *fin = fopen(inputOfTheFile,"r");
if(fout == NULL || fin == NULL){
printf("Error");
exit(1);
}
char s[20];
while(!feof(fin)){
fgets(s,20,inputOfTheFile);
for(int i = 0;i<20;i++){
if(s[i] == isupper(s[i])){
s[i] = tolower(s[i]);
}else{
s[i] = tolower(s[i]);
}
}
fputs(s,fout);
}
fclose(fout);
fclose(fin);
}
int main(){
inputOfAnString("input1.txt");
readTheString("input1.txt","output1.txt");
return 0;
}
测试fgets()
的结果,而不是feof()
。
(无论文本或讲师建议什么 feof()
- 怀疑对待)。
使用isupper()
的结果作为T/F测试。
一个分支应该使用toupper()
迭代到字符串末尾,可能小于20
char s[20];
//while(!feof(fin)){
// fgets(s,20,inputOfTheFile);
while(fgets(s, sizeof s, inputOfTheFile)) {
// for(int i = 0; i < 20;i++){
for(int i = 0; s[i];i++){
// if(s[i] == isupper(s[i])){
if(isupper(s[i])){
s[i] = tolower(s[i]);
}else{
//s[i] = tolower(s[i]);
s[i] = toupper(s[i]);
}
}
fputs(s,fout);
}
高级:使用 unsigned char
避免调用带有负值的 is...(), to...()
。
紧的选择
#define S_SIZE 20
char s[S_SIZE];
while (fgets(s, sizeof s, inputOfTheFile)) {
const unsigned char *p = (const unsigned char *) s;
while (*p) {
if(isupper(*p)) {
*p = tolower(*p);
} else {
*p = toupper(*p);
}
p++;
}
fputs(s, fout);
}