如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]

Posted

技术标签:

【中文标题】如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]【英文标题】:howto get with scanf a string ( char * ) from a user input, delimited by double quotes and containing spaces [closed] 【发布时间】:2013-11-04 00:41:09 【问题描述】:

我对 c 和 c++ 非常陌生,并且我被困在试图读取在双引号之间分隔的用户输入,以便我必须交付给我的算法类的程序。 该条目将采用以下形式:“类似这样,带有空格,并由这两个双引号分隔”。 我需要从中得到的是分隔符之间包含的字符串( char * )。 不幸的是,我一直在尝试解决这个小问题……

开发环境为虚拟化的Windows 7,ide(均为老师要求)为DEVC++

任何人都可以给我一个提示或帮助我吗?我被这个困住了,我的时间不多了。 提前致谢!

【问题讨论】:

发布what you have tried so far 的详细信息。也许有人可以帮助您继续/纠正您的方法。 如果您不局限于 C 而不是 C++,正如您的标签所示,您为什么要使用 scanf?这是一个非常强烈的指标,表明教师对 C++ 毫无头绪(自 1985 年以来)。有太多的“C++ 老师”不知道,他们经常教“带有 iostreams 的 C”,但在这种情况下,它似乎甚至被跳过了。 【参考方案1】:

假设你有一个当前字符是双引号的流,你可以

    ignore() 当前角色。 getline() 使用 '"' 作为分隔符。

这是跳过前导空格的代码,验证下一个字符是否为'"',如果是,则将值读入str

std::string str;
if ((in >> std::ws).peek() == '"' && std::getline(in.ignore(), str, '"')) 
    std::cout << "received \"" << str << "\"\n";

【讨论】:

非常感谢。我忘了提到我必须使用 scanf 来获取字符串 您可能需要查看 scanf 的文档。 %[^scanset] 格式可以帮助您读取双引号之间的所有字符。【参考方案2】:

如果我正确理解了这个问题,那么以下内容适合您。这种方法将消除每个标点符号。

#include <string>
#include <algorithm>
#include <iostream>

int main ()

  std::string input ;
  std::cout << "Please, enter data: ";

  std::getline (std::cin,input);
  input.erase( remove_if(input.begin(), input.end(), &ispunct),  input.end());
  std::cout << input << std::endl;

  std::cin.get();
  return 0;

这是结果。

>Please, enter data: There' ?are numerous issues. 
There are numerous issues

这种方法正是您使用 strtok 寻找的方法

#include <stdio.h>
#include <iostream>

int main() 

    char sentence[] = "\"something like this, with spaces, and delimited by this two double quotes\"";  
    char * word;
    std::cout << "Your sentence:\n " << sentence << std::endl;
    word = strtok (sentence,"\"");
    std::cout << "Result:\n " << word << std::endl;

    return 0;

结果

Your sentence:
 "something like this, with spaces, and delimited by this two double quotes"
Result:
 something like this, with spaces, and delimited by this two double quotes

【讨论】:

没有真正处理" 分隔符问题。 确实如此。运行代码并输入以下“有很多问题”。结果是有很多问题 好的,添加 input.erase 调用看起来可以解决问题。

以上是关于如何使用 scanf 从用户输入中获取字符串( char * ),由双引号分隔并包含空格 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中的变量的作用,如何从键盘中输入多个变量的值?

如何使用C从键盘读取字符串?

C语言输入字符和字符串

使用scanf从用户输入十六进制指令并将其保存在char中。 (C)

如何使用scanf获取提示输入?

第7课 - 程序中的数据输入