C语言字符提取问题:如何修改代码输出指定分段内容?
问题解答:如何让C程序输出第二个字符串字段
嘿,我来帮你搞定这个问题~ 你的代码里有两个关键小问题,改完就能得到你想要的HeyGoodMorning!输出啦!
先分析原代码的问题
- 赋值运算符误用成比较运算符:你写的
if (i = 2)是把i赋值为2,这个表达式的结果永远为真,所以第一次循环就触发了printf和break,直接输出第一个字段Alex。这里必须用相等比较运算符==,也就是if (i == 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
相关产品推荐
相关产品推荐

