• 智能AI问答!更聪明、更完整、原创作!
  • 一款基于GPT的超级AI机器人,可以回答问题、聊天、创作、写文案!

/*- 【程序设计】函数int trans(char p[])的功能是:统计字符串p中保存的英文单词个数(单词间用空格隔开),并将每个单词的首字母转换为大写字母。函数返回单词个数。

发布于 2024-08-12 12:54:09

下面是一个C语言程序,实现了trans函数,该函数统计字符串中的英文单词个数,并将每个单词的首字母转换为大写字母。在处理字符串时,函数跳过非字母字符,直到找到单词的首字母。

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

// 函数声明
int trans(char p[]);

int main() {
    char p[100]; // 假设字符串长度不超过99个字符
    printf("请输入一个字符串:");
    fgets(p, sizeof(p), stdin); // 使用fgets读取一行,包括空格分隔的单词

    // 去除fgets读取的换行符
    size_t len = strlen(p);
    if(len > 0 && p[len - 1] == '\n') {
        p[len - 1] = '\0';
    }

    int wordCount = trans(p); // 调用trans函数
    printf("单词个数: %d\n", wordCount);
    printf("转换后的字符串: %s\n", p); // 输出转换后的字符串

    return 0;
}

// 函数定义
int trans(char p[]) {
    int count = 0; // 单词计数器
    int state = 0; // 状态标志,0表示非单词部分,1表示单词部分

    for (int i = 0; p[i] != '\0'; i++) {
        // 遇到非字母字符,如果之前是单词状态,则单词结束,计数并重置状态
        if (!isalpha((unsigned char)p[i]) && state == 1) {
            state = 0;
            count++;
        } else if (isalpha((unsigned char)p[i])) {
            // 如果当前字符是字母,且之前不是单词状态,说明找到了新单词的首字母
            if (state == 0) {
                p[i] = toupper((unsigned char)p[i]); // 转换为大写
                state = 1; // 进入单词状态
            }
        }
    }

    // 处理字符串末尾的单词
    if (state == 1) {
        count++;
    }

    return count; // 返回单词计数
}

这个程序首先包含了<ctype.h>头文件,以便使用isalphatoupper函数。trans函数通过遍历字符串p,并使用一个状态变量state来区分单词和非单词部分。当状态从0变为1时,表示找到了新单词的首字母,将其转换为大写。当遇到非字母字符且之前是单词状态时,表示单词结束,增加单词计数。

main函数中,使用fgets从标准输入读取用户输入的字符串,然后调用trans函数,最后打印出单词的数量和转换后的字符串。

请注意,这个程序假设输入的字符串不会超过99个字符,并且输入的字符串以换行符结束,因此在读取后需要去除换行符。此外,isalphatoupper函数接受unsigned char类型的参数,以避免在处理字符时发生符号位扩展的问题。

0 条评论

发布
问题

在线
客服