c++ - 如何处理保存在指针中的内存空间?
问题描述
我已经在指针中保存了保存在字符列表中的单词的地址。我正在使用 strtok 函数来获取由我设置的关键字分隔的单词。
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main() {
unsigned int i, z;
char sir[256];
cin.getline(sir, 256);
for(i = 0; i < strlen(sir); ++i){
char * p = strtok(sir, " ,.");
while(p != nullptr) {
// here i want to process the word.
p = strtok(sir, " ,.");
}
}
return 0;
}
我想要做的是处理这样的单词:让我们假设单词“StackOverflow”,我想从第一个字母“S”到最后一个字母“w”。我怎样才能做到这一点?
非常感谢,我希望很清楚我在问什么。
解决方案
将输入更改为静态值;但只要把它关掉。
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
int main()
{
unsigned int i, z;
char sir[256] = "Thisissome ,.StackOverflow ,.sampletext";
//cin.getline(sir, 256);
char * p = strtok(sir, " ,.");
std::string word("StackOverflow");
do
{
printf ("%s\n",p);
std::string test(p);
if (word.compare(test) == 0)
{
printf("--> Found it!\n");
}
p = strtok (NULL, " ,.-");
} while(p != nullptr);
return 0;
}
strtok 将字符串拆分为一系列标记。它不应该被连续调用使用原始字符数组来基于分隔符进行解析。(即 OP 中的 for(...) strtok(...) )。
初始调用需要一个 c 字符串作为参数;成功的调用需要一个 nullptr。每次连续调用一次;下一个值将从分隔符后的 c 字符串返回。
一旦找到一个空字符;函数调用将始终返回 nullptr (当 nullptr 是第一个参数时)。
由于该解决方案已经使用 C++,因此该解决方案使用 std::string 来显示每个单词序列将如何出现;并且可以与一个标记词进行比较。
返回给 p 的值仍然只是一个 char*,因此 OP 可以决定如何使用 strtok 返回的值。该示例旨在简单地显示使用 strtok 返回分隔的单词;以及查看该词是否为“StackOverflow”的简单解决方案
推荐阅读
- android-constraintlayout - 如何为浮点类型定义资源并在“layout_constraintWidth_percent”的数据绑定中使用它?
- ruby-on-rails - 向正则表达式添加特殊字符
- spring - java.lang.ClassCastException:java.util.HashMap 无法在 Spring Boot 微服务中强制转换
- python - 如何创建一个包含 threading.Event 和 multiprocessing.Event 的协议?
- github - GitHub Actions 不起作用奇怪的错误消息
- jquery - PWA - 在 iOS 上添加到主屏幕提示?
- r - 使用 R 中预先指定的函数组合列表的每个级别的元素
- c# - 重设密码 电子邮件未发送??电子邮件发件人适用于电子邮件确认,但不适用于密码重置
- docker - 在 EC2 上将 gRPC 与 Tensorflow Serving Docker 容器一起使用时出错
- python - 如何为两人对话改进 GCP 的 Speech to Text API 结果