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

C语言字符提取问题:如何修改代码输出指定分段内容?

问题解答:如何让C程序输出第二个字符串字段

嘿,我来帮你搞定这个问题~ 你的代码里有两个关键小问题,改完就能得到你想要的HeyGoodMorning!输出啦!

先分析原代码的问题

  1. 赋值运算符误用成比较运算符:你写的if (i = 2)是把i赋值为2,这个表达式的结果永远为真,所以第一次循环就触发了printf和break,直接输出第一个字段Alex。这里必须用相等比较运算符==,也就是if (i == 2)。
  2. 字段计数和处理顺序不匹配:原代码里的i初始值是1,循环内先复制当前字段到n,再取下一个字段、递增i,导致当i变成2时,n里存的其实是第一个字段的内容。

修改后的代码方案

这里给你两种可行的修改方式,选哪种都可以:

方案一:调整计数逻辑和判断时机

#include <stdio.h>
#include <string.h>
int main(void) {
    char a[100] = "Alex:HeyGoodMorning!:1911hrs:0:1012:2017:::";
    char *p = strtok(a,":");
    char n[20];
    int i = 0; // 初始值改为0
    while(p != NULL) {
        i++; // 先递增计数,再处理当前字段
        strcpy(n,p);
        if (i == 2) { // 当处理到第2个字段时打印
            printf("%s\n",n);
            break;
        }
        p = strtok(NULL,":"); // 取下一个字段
    }
    return 0;
}

方案二:调整判断位置

#include <stdio.h>
#include <string.h>
int main(void) {
    char a[100] = "Alex:HeyGoodMorning!:1911hrs:0:1012:2017:::";
    char *p = strtok(a,":");
    char n[20];
    int i = 1;
    while(p != NULL) {
        if (i == 2) { // 先判断是不是第2个字段,再复制打印
            strcpy(n,p);
            printf("%s\n",n);
            break;
        }
        p = strtok(NULL,":"); // 取下一个字段
        i++; // 递增计数
    }
    return 0;
}

为什么这样改?

两种方案都是为了让i的计数和当前处理的字段一一对应:

  • 方案一通过调整i的初始值和递增时机,让i=1对应第一个字段Alex,i=2对应第二个字段HeyGoodMorning!,此时复制并打印就会得到正确结果。
  • 方案二则是先判断当前字段是不是第2个,是的话直接处理打印,否则继续取下一个字段并计数。

运行修改后的代码,就能输出你想要的HeyGoodMorning!啦~

内容的提问来源于stack exchange,提问作者JonP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:02:41