如何使用 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 * ),由双引号分隔并包含空格 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章