丫丫文案网—你身边的文案专家

丫丫文案网—你身边的文案专家

c语言如何判断英语句子中每个单词长度?

59

在C语言中判断英语句子中每个单词的长度,可以通过以下步骤实现:

一、基本思路

字符串分割:

将整个句子按空格或标点符号分割成单词。

长度计算:

对每个单词使用`strlen`函数计算其长度。

结果存储:

将计算结果存储在数组或结构体中,便于后续处理(如排序或输出)。

二、实现方法

1. 使用`strtok`函数分割单词

`strtok`函数可按指定分隔符将字符串分割为子串。需注意,`strtok`会修改原字符串,建议先复制一份再操作。

```c

include

include

int main() {

char sentence = "Hello, world! This is a test.";

char *token;

int word_lengths = {0}; // 假设最多100个单词

int index = 0;

// 复制句子以避免修改原字符串

strcpy(sentence, "Hello, world! This is a test.");

token = strtok(sentence, " \t\n.,!?"); // 以空格、制表符、换行符、逗号、句号、问号、感叹号分隔

while (token != NULL) {

word_lengths[index++] = strlen(token);

token = strtok(NULL, " \t\n.,!?");

}

// 输出每个单词长度

for (int i = 0; i < index; i++) {

printf("%s: %d\n", token, word_lengths[i]);

}

return 0;

}

```

2. 处理特殊情况

标点符号:上述代码将标点符号视为单词的一部分(如"it's"算长度4),根据需求可调整分隔符。

连续空格:`strtok`会自动忽略连续空格,无需额外处理。

3. 进阶优化(不修改原字符串)

若需保留原字符串,可先使用`strlcpy`复制,再分割:

```c

include

include

int main() {

char sentence = "Hello, world! This is a test.";

char *copy = strdup(sentence); // 复制原字符串

char *token;

int word_lengths = {0};

int index = 0;

token = strtok(copy, " \t\n.,!?");

while (token != NULL) {

word_lengths[index++] = strlen(token);

token = strtok(NULL, " \t\n.,!?");

}

// 输出结果

for (int i = 0; i < index; i++) {

printf("%s: %d\n", token, word_lengths[i]);

}

free(copy); // 释放复制的内存

return 0;

}

```

三、完整示例代码

综合上述方法,以下是完整的示例代码,包含输入处理和错误检查:

```c

include

include

include

int main() {

char sentence;

printf("请输入一句话:");

if (fgets(sentence, sizeof(sentence), stdin) == NULL) {

printf("输入错误\n");

return 1;

}

// 去除末尾换行符

size_t len = strlen(sentence);

if (len > 0 && sentence[len - 1] == '\n') {

sentence[len - 1] = '\0';

}

char *token = strtok(sentence, " \t\n.,!?");

int word_lengths = {0};

int index = 0;

while (token != NULL) {

word_lengths[index++] = strlen(token);

token = strtok(NULL, " \t\n.,!?");

}

// 输出每个单词长度

printf("单词长度:\n");

for (int i = 0; i < index; i++) {

printf("%s: %d\n", token, word_lengths[i]);

}

return 0;

}

```

四、注意事项

数组大小:

示例中假设最多100个单词,实际使用时应根据输入长度调整数组大小,避免溢出。

性能优化:

对于大规模文本处理,建议使用动态内存分配(如`malloc`)或更高效的字符串处理库。

标点符号处理:

根据需求调整分隔符,例如是否将撇号(')包含在单词内。

通过上述方法,可灵活实现