【问题标题】:Splitting a string in C into different variables [closed]将C中的字符串拆分为不同的变量[关闭]
【发布时间】:2020-10-25 09:33:24
【问题描述】:

我是 C 编程新手,我想知道如何从用户输入中分离出部分字符串。

我正在为我的函数 currentlt 使用 char* 和 fgets。

例如,如果用户输入“Red Chevrolet SUV” 我想将它们放入变量中,例如

char color = “Red”;
char make = “Chevrolet”;
char type = “SUV”;

输入的格式会按照[color][make][type]的顺序保持一致

【问题讨论】:

  • 去掉“时髦的引号” ... C 中的引号是“普通引号”
  • 传统方式是使用strtok,它将分隔符的(第一个字符)替换为 null 并将其自身定位到下一个标记。更现代的方法是使用strcspn 来分隔标记,strspn 来分隔分隔符。

标签: c string char


【解决方案1】:

你可以sscanf()字符串

const char *input = "Red Chevrolet SUV\n";
char color[10], make[100], type[20];
if (sscanf(input, "%9s%99s%19s", color, make, type) != 3) exit(EXIT_FAILURE);

【讨论】:

    【解决方案2】:

    首先是变量的类型

    char color = “Red”;
    char make = “Chevrolet”;
    char type = “SUV”;
    

    不正确。看来您的意思类似于以下内容

    char color[10] = “Red”;
    char make[10] = “Chevrolet”;
    char type[10] = “SUV”;
    

    您可以通过不同的方式提取子字符串。例如

    #include <stdio.h>
    
    int main( void )
    {
        enum { N = 10 };
        const char *s = "Red Chevrolet SUV\n";
        char color[N];
        char make[N];
        char type[N];
    
        sscanf( s, "%s%s%s", color, make, type );
    
        puts( color );
        puts( make );
        puts( type );
    }
    

    程序输出是

    Red 
    Chevrolet 
    SUV
    

    【讨论】:

      【解决方案3】:

      关于;

      char color = “Red”;
      char make = “Chevrolet”;
      char type = “SUV”;
      

      这不会编译!因为来自字符串的赋值会产生字符串的地址而不是字符串的内容。

      建议:

      char color[20]; strcpy( color, “Red”);  
      char make[20];  strcpy( make, “Chevrolet”); 
      char type[20]; strcpy( type, “SUV”);`  
      

      但是,由于这三个字段会有多个实例,建议:

      struct CAR 
      { 
          char color[20]; 
          char make[20]; 
          char type[20] 
      };  
      struct CAR cars[50];  
      

      然后在'i'是循环索引的循环中:

      for( int i = 0; i < 50; i++ )
      {
          char inputline[1024];
          fgets( inputline, sizeof( inputline ), stdin );
      
          char *token  = strtok( inputline, " " ); 
          strcpy( cars[i].color, token ); 
      
          token = strtok( NULL, " " );
          strcpy( cars[i].make, token );;
      
          token = strtok( NULL, " " );
          strcpy( cars[i].type, token );
      }
      

      当然,您需要为fgets()strtok() 添加必要的错误检查

      如果用户没有更多输入,您还需要添加一些逻辑以提前退出循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-20
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-30
        • 2017-08-19
        相关资源
        最近更新 更多