使用 strtok 函数标记一个句子
using strtok function to tokenize a sentence
我在使用 strtok() 函数时遇到了一些问题。我想做的是从键盘上抓取一个句子,然后为句子中的每个 space 创建标记,然后最后打印由 space 分隔的每个单词。我当前的输出是空白的我有一种感觉与我的定界符有关但我不确定,任何反馈都会很好谢谢!
键盘输入示例:
The sky is really cool
输出示例:
the
sky
is
really
cool
到目前为止我的代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
int main(){
char sent[99];
int length = strlen(sent);
cout << "Enter a Sentence" << endl;
cin.getline(sent,99);
char* tok = strtok(sent," ");
int i = 0;
while (i<=length)
{
tok = strtok(NULL, " ");
cout << tok;
i++;
}
system("pause");
}
到目前为止的输出
Enter a Sentence
the sky is really cool
Press any key to continue . . .
你根本不需要 length
,因为如果 strtok()
找不到更多的分隔符,它会 return 一个空指针:
char* token = strtok(sent," ");
while (token != NULL) {
std::cout << token << '\n';
token = strtok(NULL, " ");
}
因为这是 C++ 标签,你也可以使用 istringstream
和 std::string
:
std::istreamstream is(sent);
std::string word;
while (is >> word) {
std::cout << word << '\n';
}
您的代码中有几个问题需要解决:
- 您在
while
循环中使用的逻辑不正确。
- 您将错过打印第一个令牌的机会。
这是一个简化的 main
:
int main(){
char sent[99];
cout << "Enter a Sentence" << endl;
cin.getline(sent,99);
char* tok = strtok(sent," ");
while (tok != NULL) // Correct logic to use to stop looping.
{
cout << tok << endl; // Print the current token before getting the next token.
tok = strtok(NULL, " ");
}
}
我在使用 strtok() 函数时遇到了一些问题。我想做的是从键盘上抓取一个句子,然后为句子中的每个 space 创建标记,然后最后打印由 space 分隔的每个单词。我当前的输出是空白的我有一种感觉与我的定界符有关但我不确定,任何反馈都会很好谢谢!
键盘输入示例:
The sky is really cool
输出示例:
the
sky
is
really
cool
到目前为止我的代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
int main(){
char sent[99];
int length = strlen(sent);
cout << "Enter a Sentence" << endl;
cin.getline(sent,99);
char* tok = strtok(sent," ");
int i = 0;
while (i<=length)
{
tok = strtok(NULL, " ");
cout << tok;
i++;
}
system("pause");
}
到目前为止的输出
Enter a Sentence
the sky is really cool
Press any key to continue . . .
你根本不需要 length
,因为如果 strtok()
找不到更多的分隔符,它会 return 一个空指针:
char* token = strtok(sent," ");
while (token != NULL) {
std::cout << token << '\n';
token = strtok(NULL, " ");
}
因为这是 C++ 标签,你也可以使用 istringstream
和 std::string
:
std::istreamstream is(sent);
std::string word;
while (is >> word) {
std::cout << word << '\n';
}
您的代码中有几个问题需要解决:
- 您在
while
循环中使用的逻辑不正确。 - 您将错过打印第一个令牌的机会。
这是一个简化的 main
:
int main(){
char sent[99];
cout << "Enter a Sentence" << endl;
cin.getline(sent,99);
char* tok = strtok(sent," ");
while (tok != NULL) // Correct logic to use to stop looping.
{
cout << tok << endl; // Print the current token before getting the next token.
tok = strtok(NULL, " ");
}
}