【问题标题】:C++ reading in strings and charactersC++ 读取字符串和字符
【发布时间】:2018-10-13 15:16:02
【问题描述】:

大家好,我正在为我的 CS 课程做一个项目,但我不知道如何读取我的部分数据文件。

63f7hj-9 22spaces L 这个对吗

我的数据文件由这行数据组成,我必须弄清楚如何读取其中的一部分。我必须读入 63 并将其保存为整数,我不需要 f7hj-9。我还需要读取 22 个空格并将其保存为字符串,将 L 保存为字符。

“这是否正确”这句话需要进入控制台。

所以我的问题是,我如何只读取 63 并丢弃其余部分? 将短语“22 个空格”保存为字符串。 L作为一个字符 和短语“这是正确的”作为一个字符串。

我是 C++ 新手,我已经让这个项目的一部分工作,但我被困在这部分。

感谢您的帮助。

【问题讨论】:

  • 看std::regex
  • 阅读lexingparsing
  • 嗨尼克,您需要做的是尝试使用课堂上的内容,如果您无法让您的代码正常工作,请发布该代码并提出有关您不理解的具体问题.
  • @OznOg 在这里不需要正则表达式。我们可以使用 scanf 来完成,如下面的帖子所示
  • @shirish 如果您至少检查 scanf 的错误,我可能会接受这句话。不检查这种解析的返回更多的是一厢情愿而不是解决方案......

标签: c++ string input output


【解决方案1】:

从文件中读取输入并分割行

63f7hj-9 L 这是正确的

将整数转换为 63,忽略 7hj-9,然后读取 space1 字符串中的 22 个空格,然后读取字符 L 作为字符以及字符串 str2 内的字符串“Is this correct”的其余部分。
这是一个如何使用 fscanf(或 scanf)来实现此目的的示例。
  • %d 将读取整数,因为它是整数的格式说明符

  • 接下来我们需要忽略文件中的“f7hj-9”,因此只需按原样编写即可

  • 接下来我们需要读取 22 个空格,因此 %22c 将读取 22 个字符,无论该字符是换行符还是空格(此处为 22 个空格)

  • 接下来我们需要读取一个字符,以便 %c 将其存储在 char c 中
  • 现在另一个 %*c 将忽略 L 之后的一个空格
  • 使用 %[^\n]s 将读取字符串的其余部分,直到换行为止


#include <stdio.h>
int main() {
  int n;
  char c;
  char space1[23];
  char str2[32];
  FILE *fp;
  fp = fopen("b.txt", "r");
  if(fp == NULL) {
    printf("Failed to open the file\n");
    return 1;
  }
  if(fscanf(fp, "%df7hj-9%22c%c%*c%[^\n]s", &n, space1, &c, str2) != 4) {
      printf("Read failure\n");
      return 1;
  }
  printf("Integer = %d\n", n);
  printf("Spaces = %sEnd\n", space1);
  printf("Character = %c\n", c);
  printf("String = %s", str2);
  return 0;
}


输入:

63f7hj-9 L 这是正确的

输出:

Integer = 63
Spaces =                       End
Character = L
String = Is this correct

【讨论】:

  • @Nick 明白了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2020-06-29
  • 2014-11-21
  • 2011-11-01
相关资源
最近更新 更多