|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- struct Book *searchBook(struct Book *library, char *target)
- {
- struct Book *book;
-
- book = library;
- while (book != NULL)
- {
- if (!strcmp(book->title, target) || !strcmp(book->author, target))
- {
- break;
- }
- book = book->next;
- }
-
- return book;
- }
复制代码
if (!strcmp(book->title, target) || !strcmp(book->author, target)) 这一句是什么意思? 一致的话strcmp返回值是1,!1=0, 0||0就book = book->next了?
`!strcmp(book->title, target)` 这一句的意思是比较`book->title`和`target`两个字符串是否相同。`strcmp`函数在两个字符串相等时返回0,否则返回一个非零的值。因此,当`strcmp(book->title, target)`返回0时,`!strcmp(book->title, target)`就会返回1(真),表示两个字符串相同。
`||` 是逻辑或运算符,用于判断其左右两个表达式是否有一个为真。如果`!strcmp(book->title, target)`返回真(即两个字符串相同)或`!strcmp(book->author, target)`返回真(即两个字符串相同),那么整个条件表达式就为真,执行`break`语句跳出循环。
如果两个表达式都为假(即两个字符串都不相同),那么整个条件表达式为假,继续执行`book = book->next`,将`book`指针指向下一个书籍节点,继续遍历下一个书籍。
最终,如果没有找到与目标字符串匹配的书籍,循环结束后`book`将为NULL,函数返回NULL。
下面是一个简化的例子来说明这个过程:
- #include <stdio.h>
- #include <string.h>
- struct Book {
- char title[100];
- char author[100];
- struct Book *next;
- };
- struct Book *searchBook(struct Book *library, char *target) {
- struct Book *book = library;
-
- while (book != NULL) {
- if (!strcmp(book->title, target) || !strcmp(book->author, target)) {
- break;
- }
- book = book->next;
- }
-
- return book;
- }
- int main() {
- // 创建书籍链表
- struct Book book1 = {"Book1", "Author1", NULL};
- struct Book book2 = {"Book2", "Author2", NULL};
- struct Book book3 = {"Book3", "Author3", NULL};
- struct Book library = {NULL, NULL, &book1};
- book1.next = &book2;
- book2.next = &book3;
- // 搜索书籍
- struct Book *result = searchBook(&library, "Book2");
-
- // 输出结果
- if (result != NULL) {
- printf("找到匹配的书籍:%s\n", result->title);
- } else {
- printf("未找到匹配的书籍\n");
- }
- return 0;
- }
复制代码
在上面的例子中,我们创建了一个包含三本书的链表。然后通过调用`searchBook`函数来搜索标题为"Book2"的书籍。最终会输出"找到匹配的书籍:Book2"。如果将目标字符串改为"Book4",则输出"未找到匹配的书籍"。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
|
|