在C中添加字符串的字符

时间:2012-05-12 14:10:41

标签: c

我有编程任务,我们被要求创建一个程序,用户可以用这种格式输入日期dd / mm / year。然后我们必须找到一种方法来提取每个数字并在结构中输入日,月和年字段。

我想将用户的整个输入读作字符串,然后只选择我想要的字符串的值。这是我的代码。

结构声明:

 struct datestructure{
    char day;
   char month;
   char year;
  };

struct prj{
   int ID;
   struct namestructure name;
   struct datestructure date;
   float price;    

 };



 struct prj project[MAX];

这是我写的代码。

     char dateinput[11];
 scanf("%s", dateinput);


 printf("%s", dateinput); //making sure that the input is read correctly


 project[n].date.day = dateinput[0]+dateinput[1];


 printf("%s", project[n].date.day );

然而,这不起作用,我的想法已经不多了。你能否就如何解决这个问题给我一些指导。

感谢。

4 个答案:

答案 0 :(得分:2)

如果您想将其另存为数字,请使用int

struct datestructure{
    int day;
    int month;
    int year;
  };

至于转换,char到int ...

project[n].date.day = (dateinput[0] - '0') * 10 + dateinput[1] - '0';

了解其工作原理,并在同一个月和一年中进行。

答案 1 :(得分:1)

以下是一些建议:

  1. 考虑更改日,月和日的类型年到int。
  2. 解析日,月和日年份完整的日期字符串
  3. 转换每天,每月和每一天。使用系统函数之一(atoi或strtol等)或您自己的逻辑代码进入整数年。
  4. 解析字符串的一些基本示例(只是一个示例供您理解。还有其他更好的方法):

    char day[3] = {0};
    char month[3] = {0};
    char year[5] = {0};
    
    memcpy(day, dateinput,2);
    memcpy(month,dateinput+3, 2);
    memcpy(year,dateinput+5, 4);
    

    注意: 上述代码不会处理错误的输入,并认为具有单个数字的日期和月份将使用前面的0进行输入.Ex输入: 07月03日。请注意前面的0在7和3之前。首先,您可以尝试这样做以及稍后自己即兴创作以处理所有错误情况。

答案 2 :(得分:1)

您可以将12/05/2012 [今天]作为输入法。现在写上 i = 0; //考虑日期在str中 printf(“%d”,str [i]); //得到等效的ascii char

现在你知道了char 2的acii char。从int的ascii char中减去它。存储在变量中并在整个数组中减去它。

答案 3 :(得分:1)

您已经在使用scanf,这可能比您意识到的更多:

#include <stdio.h>

struct datestructure {
    int day;
    int month;
    int year;
};

int main() {
    struct datestructure date;
    int count = scanf("%d/%d/%d", &date.day, &date.month, &date.year);
    if (count != 3) {
        printf("Invalid input\n");
    } else {
        printf("You said %d-%d-%d\n", date.year, date.month, date.day);
    }
}

还有strftime,需要花费更多精力才能使用,但会根据对日历的了解来验证输入。