gpt4 book ai didi

c - 我怎样才能从c中的一行中提取单词?

转载 作者:太空宇宙 更新时间:2023-11-04 02:08:54 26 4
gpt4 key购买 nike

我使用了这段代码,但它不能正常工作。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

int main() {
char line[120], *word;
int o, row, col, letter, i;
o = scanf("%s", line);
row = 0;
while(o != -1) {
col = 0;
while(isprint(line[col])) {
word = (char *) malloc(sizeof(char)*20);
for(i=0; i<20; i++) *(word + i) = 0;
letter = 0;
while(isalpha(line[col])) {
*(word + letter) = line[col];
col++;
letter++;
}
col++;
printf("%s\n", word);
free(word);
}
row++;
o = scanf("%s", line);
}
return 0;
}

例如,我给作为输入:

can you take a string?

我将其作为输出:

can
you
take
a
ke
string

我找不到错误,但输出与我想要的相差不远意味着错误很小。请帮助我...:)

最佳答案

这很复杂。为什么不直接用空白字符分隔所有连续的非空白子字符串?

char buf[LINE_MAX];
fgets(buf, sizeof(buf), stdin);

char *end;
const char *seps = " \t\r\n\f\v";
char *p = strtok_r(buf, seps, &end);
printf("%s\n", p);
while (p = strtok_r(NULL, seps, &end))
printf("%s\n", p);

一些建议:

  • 不要重新发明轮子。使用标准库而不是滚动您自己的字符串处理(等)函数。它们方便了您的生活,它们保证是正确的(至少在相当高质量的实现的情况下)并且它们使您的代码更短,从而更具可读性。

  • 当仅需要本地(函数范围)存储时,请优先使用自动数组而不是 malloc()。自 C99 以来,可变长度数组是标准的,因此在指定数组大小时,您甚至不需要将自己限制为常量整数表达式。

  • 但是如果您决定使用malloc(),那么至少don't cast its return value .

关于c - 我怎样才能从c中的一行中提取单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17113522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com