将字符串拆分为不同的变量

时间:2011-04-02 17:04:44

标签: c string

嘿伙计们!我是C的新手,所以我想帮助解决一个问题。我必须将一个字符串分开并将其置于不同的变量中。想象一下,Sol 3 5会产生类似的结果:

var1=Sol  
var2=3  
var3=5 

我尝试使用scanf,但它在第一个空格中停止:/。
提前谢谢!
干杯!

编辑:不是我的作业,我只是练习,但我现在真的想要如何做到这一点:)。我现在的代码是:

int main () {  
    char var1[10],var2[10],var3[10],func;  
    fgets(func, 20, stdin);   
    fscanf(func,"%s %d %d", var1,var2,var3);  
    printf("%s %d %d", var1,var2,var3);  
    return 0;  
}

3 个答案:

答案 0 :(得分:3)

strtok是您需要的功能:

 #include <string.h>

 char* str = "Sol 3 5";
 char* ptr;
 char* saved;
 ptr = strtok_r(str, " ", &saved);
 while (ptr != NULL)
 {
   printf("%s\n", ptr);
   p = strtok_r(NULL, " ", &saved);
 }

只需注意:此函数修改原始字符串,将字符串标记的末尾(空值,\0)替换为分隔符。

好吧scanf无论如何都会很好,但是如果你没有说清楚它是否是家庭作业,我就不会帮助你。

答案 1 :(得分:3)

编辑和代码发布后

你的问题是你骗了编译器。不要那样做。它不喜欢它:)

你要求编译器读取一个字符串和2个整数...但是告诉它将结果放在一个char数组中(仅对第一次转换是正确的)

             /* char[] but %d wants pointer to int */
    fscanf(func,"%s %d %d", var1,var2,var3);
                         /* all var1, var2, and var3 are arrays of char! */

尝试将变量声明为

    char var1[10];
    int var2,var3;

哦! func被声明为普通字符。你可能想要别的东西。

一旦你声明了这样的变量,你需要更改scanf调用传递int的地址,而不是它们的(未初始化的)值。

答案 2 :(得分:0)

有一个类似于scanf的函数sscanf。它的工作方式相同,但它从字符串而不是从文件中读取值:

sscanf("Sol 3 5", "%s%d%d", v1, &v2, &v3);