You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言程序修改需求:判断字符串唯一字符出现次数的整体奇偶类型

示例输入输出
  • 示例输入: aaxdxddd
    输出: even(偶数)
  • 示例输入: aada
    输出: odd(奇数)
  • 示例输入: aadssssdddd
    输出: both(两者皆有)
现有代码
#include <stdio.h>
#include <string.h>
int main(){
    
    char s[1000];  
    int  i,j,k,count=0,n;

    printf("Enter the string: ");
    gets(s);
     
    int len = strlen(s);
    
    for(i=0;i<len;i++){
        count=1;
        
        if(s[i]){
            
            for(j=i+1;j<len;j++){   
              
                if(s[i]==s[j]){
                    count++;
                    s[j]='\0';
                }
            }  
                    printf(" '%c' = %d \n",s[i],count);
          
             if (count%2==0){
                printf("even\n");
                 //break;
             }
                 else if (count%2==1){
                     printf("odd\n");
                     //break;
                 }
        }
             
    } 
    return 0;
}
问题描述

当前代码会逐个判断字符串中每个唯一字符的出现次数是奇数还是偶数,但我需要实现的功能是:判断所有唯一字符的出现次数是否全为偶数、全为奇数,或是两者皆有,现寻求代码调整方案。

调整后的代码
#include <stdio.h>
#include <string.h>

int main(){
    char s[1000];  
    int i, count;
    int has_even = 0, has_odd = 0;

    printf("Enter the string: ");
    // 替换不安全的gets,用fgets读取输入
    fgets(s, sizeof(s), stdin);
    // 去除输入末尾的换行符
    s[strcspn(s, "\n")] = '\0';
     
    int len = strlen(s);
    
    for(i=0; i<len; i++){
        count = 1;
        
        if(s[i]){
            for(int j=i+1; j<len; j++){   
                if(s[i] == s[j]){
                    count++;
                    s[j] = '\0';
                }
            }  
            // 更新奇偶标记
            if(count % 2 == 0){
                has_even = 1;
            } else {
                has_odd = 1;
            }
        }
    } 

    // 根据标记输出最终结果
    if(has_even && has_odd){
        printf("both(两者皆有)\n");
    } else if(has_even){
        printf("even(偶数)\n");
    } else if(has_odd){
        printf("odd(奇数)\n");
    }

    return 0;
}
关键修改说明
  • 新增has_even和has_odd两个标记变量,用于记录字符串中是否存在出现次数为偶数或奇数的字符。
  • 移除原代码中逐个输出字符计数和奇偶的逻辑,改为遍历过程中更新标记。
  • 用fgets()替代已废弃的gets()函数,避免缓冲区溢出风险,并处理输入末尾的换行符。
  • 遍历完成后,根据两个标记的组合情况输出结果:
    • 若两个标记都为1,说明既有偶数次字符也有奇数次字符,输出both(两者皆有)
    • 仅has_even为1,说明所有字符出现次数都是偶数,输出even(偶数)
    • 仅has_odd为1,说明所有字符出现次数都是奇数,输出odd(奇数)

内容的提问来源于stack exchange,提问作者John Lynard Isip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:15:42