【发布时间】:2021-12-28 18:12:09
【问题描述】:
我想将字符串 i 中的每个单词都返回到一个节点中,但一开始它不起作用,但它会自动添加一些奇怪的字符,我想知道为什么如果有人能告诉我如何修复它。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct listeMots{
char val[20];
struct listeMots *next;
}listeMots;
listeMots motsDe(char* t);
int main()
{
char* t;
t = "this is a test but it is bugging ";
listeMots nchlh;
nchlh = motsDe(t);
return 0;
}
listeMots motsDe(char* t){
int i=0 ,j=0;
char* temp;
listeMots *tete = malloc(sizeof(listeMots));
listeMots *ptr = tete;
while (t[i] != '\0')
{
if('a'<=t[i] && t[i]<='z' ){
ptr->val[j] = t[i];
i++;
j++;
}
else if (t[i] == ' '){
j = 0;
printf("%s -->",ptr->val);
ptr->next = malloc(sizeof(listeMots));
ptr = ptr->next;
i++;
}
else{
j= 0;
printf("%s -->",ptr->val);
ptr->next = malloc(sizeof(listeMots));
ptr = ptr->next;
ptr->val[0] = t[i];
printf("%s -->",ptr->val);
ptr->next = malloc(sizeof(listeMots));
ptr = ptr->next;
}
}
return *tete;
}
我真的看不出错误在哪里,我知道我很接近但我现在还是有点迷路
【问题讨论】:
-
if('a' <= t[i] <= 'z' )是正确的语法,但并不像您想的那样 - C 不像数学表达式那样编写。请尝试if('a' <= t[i] && t[i] <= 'z' )。或者更简单的if(islower(t[i])) -
listeMots *tete ;你永远不会分配给这个。你是说listeMots tete ;吗? -
谢谢你们让我注意到 2 个错误现在它有点工作但输出有点奇怪,它添加了一些奇怪的字符我将编辑我的代码并向你展示它是如何的
-
确保使用
\0终止字符串。 -
在检查空间的 else 块中,在重置变量
j之前,您应该执行ptr->val[j] = '\0';,以便正确终止单词。此外,在您的第二个 else 块中,您没有增加变量i,需要这样做。
标签: c linked-list