- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家好,我有一个关于 C 中字符串操作的问题。
我得到了一个文件并从中获取了推文,并要求我从字符串中获取主题标签并将其放入 avl 树中,因此我的所有 avl 函数都很好,但扫描字符串部分有点问题。
我的推文示例是hello buddies #happy
这是代码:
void read_tweet_data(avl_tree *t, char name[]) {
FILE *data;
data = fopen(name, "r");
char eof, temp[140], *temp2;
char *has, *myc;
int i;
while (fgets(temp, 140, data) != EOF) {
//puts(temp);
for (i = 0; i < strlen(temp); i++) {
//Dont know what I should put there.
}
}
}
我需要扫描其中不含“#”的主题标签,并且需要您的帮助。谢谢。
最佳答案
在您的代码中,您编写:
for(i = 0; i < strlen(temp); i++) {
//Dont know what I should put there.
}
其他人指出您不应该使用 strlen
作为循环条件;使用 temp[i] != '\0'
代替。真正的问题是您可能不想在单个循环中提取主题标签。
您正在寻找某种模式,但您事先并不知道会获得多少次点击。找到一个匹配项后,您再次查看字符串的其余部分。
因此,编写一个函数来一次处理一个推文主题标签可能是一个好主意。该函数需要一个状态变量,因此它知道上次调用时停止的位置。
生成的主题标签必须存储在某个地方。某些函数(例如 strtok
)会修改原始字符串以生成以 null 结尾的子字符串,而不复制数据。此处无法完成此操作,因为主题标签可能会互相冲突#like#this
,并且使用空字符覆盖第二个哈希将跳过主题标签this
。因此该函数传递了一个可以填充的字符缓冲区。缓冲区大小也被传递,这样缓冲区就不会被覆盖。缓冲区中的字符串保证以 null 结尾。
一个hashtag是一个井号,后面紧跟不带重音的拉丁字符、数字和下划线。井号之后的第一个字符可能不是数字。
将所有这些放在一起:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int is_valid(int c, int num_allowed)
{
if ('A' <= c && c <= 'Z') return 1;
if ('a' <= c && c <= 'z') return 1;
if ('0' <= c && c <= '9') return num_allowed;
if (c == '_') return 1;
return 0;
}
int hashtag(char **p, char buf[], size_t max)
{
char *q;
if (*p == NULL || **p == '\0') return 0;
q = strchr(*p, '#');
while (q && is_valid(q[1], 0) == 0) {
q = strchr(q + 1, '#');
}
if (q) {
size_t n = 0;
q++; // skip hash sign
while (n + 1 < max && is_valid(*q, 1)) {
buf[n++] = *q++;
}
if (max) buf[n] = '\0'; // terminate buffer
*p = q; // remember position
return 1; // hashtag found
}
return 0; // nothing found
}
以及如何使用该功能的示例:
int main()
{
char *tweet = "#amith7951 https://t.co/eoW5q7V2Fh #net "
"#ajax #asp #cprogramming #sql "
"### ###happy#new#2016 #";
char *p = tweet; // state variable for hashtag function
char tag[32]; // char buffer to store hashtag in
int n = 0;
while (hashtag(&p, tag, sizeof(tag))) {
printf("[%d] %s\n", n++, tag);
}
return 0;
}
生成的函数可能看起来很长,但调用代码很简单。该函数还大量使用指针。您可以使用数组索引,但由于 strchr
(以及许多其他库函数)无论如何都使用指针,因此在整个过程中使用指针是有意义的。
关于c - 用 C 语言从推文中获取主题标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637583/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!