【问题标题】:How to read only alphabetical characters from a txt file while ignoring white spaces and other special characters?如何从 txt 文件中只读取字母字符而忽略空格和其他特殊字符?
【发布时间】:2016-09-29 04:30:25
【问题描述】:

我使用指针打开一个包含多个段落的.txt 文件。我使用 for 循环将 .txt 文件存储到 char word[i] 数组中,然后将其存储到 printf 中。

除了我不想存储空格和特殊字符之外,一切都运行良好。我只想将ABCD......Z等字母字符存储到我的char word[i]数组中。

我知道我必须将 if 函数放入我的 for 循环中,但我不知道确切的语法。请帮忙。

这是我的代码的 for 循环:

 for (i=0; i<1730; i++ )
   {
       fscanf(fptr,"%c", &word[i]);
       printf("%c", word[i]);
   };

【问题讨论】:

  • 您可以在 C 教科书或网上轻松查找如何使用if
  • if 不起作用。

标签: c character whitespace space


【解决方案1】:
#include <stdio.h>
#include <string.h>
int main() 
{
    FILE *fptr;
    char chr;
    char *file_name="IdentifiedParts.txt";
    fptr = fopen(file_name, "r");
    while ( (fscanf(fptr,"%c",&chr)) != EOF ) {
           //ASCII values : 65-90 => A-Z ,  97-122 => a-z
        if( (chr >= 97 && chr <= 122 ) || (chr >= 65 && chr <= 90 ) ) {
             printf("%c", chr);
        }
    }
    fclose(fptr);
    return 0;
}

      OR 

   while ( (fscanf(fptr,"%c",&chr)) != EOF ) {
          if(isalpha(chr)) {
            printf("%c", chr);
          }
    }

【讨论】:

  • 应该是char chr;;fgets 返回 int 而不是 char
  • chr &gt;= 97 &amp;&amp; 122 &lt;= chr 表示122 &lt;= chr
  • 嗨 BLUEPIXY,你知道 C 语言,首先你在你发表评论后编译这段代码。 (chr >= 97 && 122 = 65 && 90
  • 你说的是认真的吗?哈哈。你不会编译运行吧?见DEMO
  • 您的代码错误,请将 if 条件 if(chr >= 97 && 122 = 97 && chr DEMO跨度>
【解决方案2】:

类似这样的:

#include <stdio.h>
#include <ctype.h>

int main(void){
    char word[1730];
    FILE* fptr = fopen("input.c", "r");
    int i, ch;

    for (i = 0; i<1730 && (ch = fgetc(fptr)) != EOF; i++ ){
        if(isalpha(ch))
            printf("%c", word[i]=ch);
    }
    fclose(fptr);
    return 0;
}

#include <stdio.h>

int main(void){
    char word[1730];
    FILE* fptr = fopen("input.txt", "r");

    while(!feof(fptr)){
        while(1 == fscanf(fptr, "%1729[A-Za-z]", word)){
            printf("%s", word);
        }
        fscanf(fptr, "%*[^A-Za-z]");
    }

    fclose(fptr);
    return 0;
}

【讨论】:

  • 您好,BlUEPIXY,感谢您的回答。您的代码确实显示了没有空格和特殊字符的所有字符。但不幸的是,每个字符的 char word[i] 值似乎与句子中的单词不匹配:“CSthesciencethat...” 例如:我试图打印出 char word[0] 并期望看到 C 作为第一个字母或 char word[1] 为 S,但情况并非如此。
  • @UncleZhangHeorZhangHimHer 试试printf("%s", word); --> printf("%s\n", word);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
相关资源
最近更新 更多