我在使用此代码时遇到了一些麻烦。我正在尝试编写一个函数,允许用户输入一个字符串(多个单词),然后返回第一个单词。使用Python但C ++的一个简单任务再次让我感到困惑。我在那里的一部分,并意识到我仍然需要添加第一个令牌的实现,但在增量调试中我遇到了一些障碍。我追求的问题是:
以下是代码:
/*
* Problem 1: "Extract First String"
* Takes a user string and extracts first token (first token can be a whole word)
*/
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void ExtractFirstToken();
int main()
{
ExtractFirstToken();
return 0;
}
/*
* Trying to create a function that will allow a user to enter a string of words and
* then return the first word
*/
void ExtractFirstToken()
{
cout << "Please enter a string (can be multiple words): ";
string stringIn;
while (true)
{
cin >> stringIn;
if (!cin.fail()) break;
cin.clear();
cout << "not a string, please try again: ";
}
cout << stringIn;
}
答案 0 :(得分:1)
1)否。数字作为字符串完全有效。
首先根据您的定义编写一个确定字符串是否为单词的函数。像这样:
bool IsWord(const std::string & str)
{
return str.find_first_of("0123456789 \t\n") == std::string::npos;
}
然后:
std::string word;
while(std::cin >> word)
{
if (IsWord(word)) break;
cout << "not a word, please try again: ";
}
std::cout << word;
2)只需从命令行运行程序即可。
答案 1 :(得分:1)
因为字符串完全能够保存“12345”。为什么会失败?
我会说std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
之类的东西(嘿,有趣的是我的回答与Benjamin Lindley完全一样,直到使用numeric_limits和streamize)
这将等待输入,直到您按Enter键。
答案 2 :(得分:0)
这是标准的格式化I / O习语:
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::string line;
std::cout << "Please enter some text: ";
while (std::getline(std::cin, line))
{
std::istringstream iss(line);
std::string word;
if (iss >> word)
{
std::cout << "You said, '" << line << "'. The first word is '" << word << "'.\n";
std::cout << "Please enter some more text, or Ctrl-D to quit: ";
}
else
{
// error, skipping
}
}
}
除了通过到达输入流的末尾而不能读取字符串,用户必须用Ctrl-D
或类似的信号(MS-DOS上的Ctrl-Z
)发送信号。您可以添加另一个中断条件,例如如果修剪后的输入字符串等于"q"
左右。
内部循环使用字符串流来标记该行。通常你会处理每个令牌(例如转换为数字?),但在这里我们只需要一个,即第一个单词。
答案 3 :(得分:0)
所有可打印字符都是有效的字符串元素,包括数字。因此,如果您希望将数字解释为无效输入,则您必须自己完成工作。例如:
if (stringIn.find_first_of("0123456789") != stringIn.npos)
cout << "not a valid string, please try again: ";
答案 4 :(得分:0)
第一部分你有很多答案,所以我会帮助第二部分:
system("pause");