To_d_a_y 2021-07-01 07:56 采纳率: 100%
浏览 36
已采纳

C语言 可运行出窗口,但提取不出来信息,求看看那里出问题了

include <stdio.h>

include <conio.h>

include <string.h>

include <stdlib.h>

#include <malloc.h> /将数字转换成整数/ int ChangeStrToInt (char str[]){ int result = 0;
/* 下面代码中把数组名当作指针变量来使用 */
for(; * str!= '\0'; str++)
{
/*将字符表示的数字转换成对应的整数数字并拼接成对应的整数 */ result = result * 10 + ( str - 48); }
return result; } /
从字符串中取出对应的子串 / / 如:字符串"ABCD",取出第二个字符开始到第4个字符结束,得到字符串"BCD" / char * GetSubString(char * str, int begin, int end)
{
char * result;
int i;
/
为局部变量申请内存 */
result = (char )malloc(100); / 用空字符填充字符串 /
for(i = 0; i<100;i++) result[i] = 0;
/
取子串 */
for(i = begin - 1;i<= end - 1;i++) result[i - begin + 1] = str[i]; return result;
}
void GetIDCodeInfo(char * idCode,int currentYear,int * year, int * month, int * day, int * age, int * gender)
{ /*GetSubString(idCode,7,10)是函数调用语句 */
/*把一个函数调用的结果作为另外一个函数调用语句的实际参数 */
/*称为函数的嵌套使用 */

  • year = ChangeStrToInt(GetSubString(idCode,7,10));
  • month = ChangeStrToInt(GetSubString(idCode,11,12));
  • day = ChangeStrToInt(GetSubString(idCode,13,14));
  • age = currentYear -* year; if(ChangeStrToInt(GetSubString(idCode,15,17)) % 2 == 0)
    {
  • gender = 0;
    }
    else
    {
  • gender = 1;
    }
    }
    main()
    {
    char idCode[30] =""; int year,month,day,age,currentYear = 2021,gender;
    year = month = day = age = gender = 0;
    printf("输入18位的身份证号码[如:429004197507022369]:") ; gets(idCode); GetIDCodeInfo(idCode,currentYear,&year,&month,&day,&age,&gender); printf("\n输入身份证号码为:%s\n 当前年份为:%d\n\t 出生日期为:[%4d/2d:%2d]\n\t 年龄:%d\n\t 性别:%s", idCode,currentYear,year,month,day,age,gender == 0? "女":"男"); getch(); }
  • 写回答

3条回答 默认 最新

  • 浪客 2021-07-01 09:17
    关注

    6301看好西宁滴呗。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    /*将数字转换成整数*/
    int ChangeStrToInt(char *str)
    {
        int result = 0;
    
        /* 下面代码中把数组名当作指针变量来使用 */
        //for (; *str != '\0'; str++)
        while(*str)
        {
            /*将字符表示的数字转换成对应的整数数字并拼接成对应的整数 */
            result +=  *str - '0';
            result *= 10;
            *str++;
        }
    
        return result/10;
    } // 从字符串中取出对应的子串
    // 如:字符串"ABCD",取出第二个字符开始到第4个字符结束,得到字符串"BCD"
    char *GetSubString(char *str, int begin, int end)
    {
        char *result;
        int i,j;
        /* 为局部变量申请内存 */
        //result = (char)malloc(100); /* 用空字符填充字符串 */
        result = (char *)calloc(100, sizeof(char)); //分配内存并用0填充
        // for (i = 0; i < 100; i++)
        // {
        //     result[i] = 0;
        // }
    
        /* 取子串 */
        //还得检测是否到字符串结尾了
        for (i = begin - 1,j=0; i <= end - 1 && str[i] != '\0'; i++,j++) //for (i = begin - 1; i <= end - 1; i++)
        {
            //result[i - begin + 1] = str[i];
            result[j] = str[i];
        }
        result[j] = '\0';
        return result;
    }
    void GetIDCodeInfo(char *idCode, int currentYear, int *year, int *month, int *day, int *age, int *gender)
    {
        /*GetSubString(idCode,7,10)是函数调用语句 */
        /*把一个函数调用的结果作为另外一个函数调用语句的实际参数 */
        /*称为函数的嵌套使用 */
    
        //日期,年龄,性别都是指针,需要*
        *year = ChangeStrToInt(GetSubString(idCode, 7, 10));
        *month = ChangeStrToInt(GetSubString(idCode, 11, 12));
        *day = ChangeStrToInt(GetSubString(idCode, 13, 14));
        *age = currentYear - *year;
    
        if (ChangeStrToInt(GetSubString(idCode, 15, 17)) % 2 == 0)
        {
            *gender = 0;
        }
        else
        {
            *gender = 1;
        }
    }
    int main()
    {
        char idCode[30] = "";
        int year, month, day, age, currentYear = 2021, gender;
        year = month = day = age = gender = 0;
    
        printf("输入18位的身份证号码[如:429004197507022369]:");
        gets(idCode);    
        GetIDCodeInfo(idCode, currentYear, &year, &month, &day, &age, &gender);
        //printf("\n输入身份证号码为:%s\n 当前年份为:%d\n\t 出生日期为:[%4d/2d:%2d]\n\t 年龄:%d\n\t 性别:%s", idCode,currentYear,year,month,day,age,gender == 0? "女":"男"); 
        printf("\n输入身份证号码为:%s\n当前年份为:%d\n出生日期为:[%4d-%2d-%2d]\n年龄:%d\n性别:%s\n", idCode, currentYear, year, month, day, age, gender == 0 ? "女" : "男");
    
        getchar();
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • qfl_sdu 2021-07-01 09:16
    关注

    main函数中的printf()中漏了一个% 代码修改如下:

    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <malloc.h> 
    /*将数字转换成整数*/ 
    int ChangeStrToInt (char str[])
    { 
        int result = 0;
        /* 下面代码中把数组名当作指针变量来使用 */
        for(; * str!= '\0'; str++)
        {
            /*将字符表示的数字转换成对应的整数数字并拼接成对应的整数 */ 
            result = result * 10 + ( *str - 48); //修改
        }
        return result; 
    } 
    /*从字符串中取出对应的子串 */ 
    /* 如:字符串"ABCD",取出第二个字符开始到第4个字符结束,得到字符串"BCD" */ 
    char * GetSubString(char * str, int begin, int end)
    {
        char * result;
        int i;
        /* 为局部变量申请内存 */
        result = (char* )malloc(end -begin + 2); /* 用空字符填充字符串 */
        for(i = 0; i<end -begin + 2;i++) result[i] = 0;
        /* 取子串 */
        for(i = begin - 1;i<= end - 1;i++) 
            result[i - begin + 1] = str[i]; 
        return result;
    }
    void GetIDCodeInfo(char * idCode,int currentYear,int * year, int * month, int * day, int * age, int * gender)
    { /*GetSubString(idCode,7,10)是函数调用语句 */
        /*把一个函数调用的结果作为另外一个函数调用语句的实际参数 */
        /*称为函数的嵌套使用 */
    
        *year = ChangeStrToInt(GetSubString(idCode,7,10));
        *month = ChangeStrToInt(GetSubString(idCode,11,12));
        *day = ChangeStrToInt(GetSubString(idCode,13,14));
        *age = currentYear - *year; 
        if(ChangeStrToInt(GetSubString(idCode,15,17))%2 == 0)
        {
            *gender = 0;
        }
        else
        {
            *gender = 1;
        }
    }
    int main()
    {
        char idCode[30] ={0}; 
        int year,month,day,age,currentYear = 2021,gender;
        year = month = day = age = gender = 0;
        printf("输入18位的身份证号码[如:429004197507022369]:") ; 
        gets(idCode); 
        GetIDCodeInfo(idCode,currentYear,&year,&month,&day,&age,&gender); 
        printf("\n输入身份证号码为:%s\n 当前年份为:%d\n\t 出生日期为:[%4d/%2d:%2d]\n\t 年龄:%d\n\t 性别:%s", idCode,currentYear,year,month,day,age,gender == 0? "女":"男"); 
        getch(); 
        return 0;
    }
    
    评论
  • lsk031136 2021-07-01 09:22
    关注

    #include "stdafx.h" #include "CStr.h"

    CStr::CStr() { } CStr::~CStr() {

    }

    //字符串中有多少个指定字符串 //str是字符串,tmp是指定字符串 int CStr::StrTmpNum(string str, string tmp) { int num = str.length(); int tmpnum = 0;//记录有多少个* while (1) { int a = str.find(tmp); if (a == -1) { break; } str = str.substr(a + 1, num); //cout << str << endl; tmpnum++; //system("pause"); } if (tmpnum == 0) { return -1; } else { return tmpnum; }

    }

    //拆分字符串中以*分割 一行两列 //str是字符串,tmp是分割字符 Split CStr::Arrstr(string str, string tmp) { Split cf; int strcount = str.length();

    int charcount = StrTmpNum(str, tmp);//字符串中有多少个指定字符串
    if (charcount == -1)
    {
        string z = "-1";
        string *err = &z;
        cf.a = err;
        cf.b = err;
        return cf;
        
    }
    
    int tmpcount = tmp.length();
    string *arr = new string[(charcount + 1) / 2];
    string *brr = new string[(charcount + 1) / 2];
    for (int i = 0; i < (charcount + 1) / 2; i++)
    {
        if (!str.empty())//判断字符串后面是否为空
        {
            int index = str.find(tmp);//指定字符串的位置
            arr[i] = str.substr(0, index);//截取分界符前面的字符串
            str = str.substr(index + tmpcount, strcount);//刷新字符串
        }
        if (!str.empty())//判断字符串后面是否为空
        {
            int index1 = str.find(tmp);//指定字符串的位置
            brr[i] = str.substr(0, index1);//截取分界符前面的字符串
            str = str.substr(index1 + tmpcount, strcount);//刷新字符串
        }
    }
    
    cf.a = arr;
    cf.b = brr;
    return cf;
    

    }

    //拆分字符串中以*分割 一行一列 //str是字符串,tmp是分割字符串 Split CStr::Substr(string str, string tmp) { int num = str.length(); int strcount = StrTmpNum(str, tmp);//字符串中有多少个指定字符串 string *arr = new string[strcount]; for (int i = 0; i < strcount; i++) { int index = str.find(tmp); arr[i] = str.substr(0, index); str = str.substr(index + 1, num); }

    Split cf;
    cf.a = arr;
    return cf;
    

    }

    //查找字符串中的指定字符串并删除 //str是字符串,tmp是要删除的字符串 string CStr::Delstr(string str, string tmp) {

    int tmpnum = tmp.length();//删除字符串的长度
    while (1)
    {
        int strnum = str.find(tmp);//删除字符串的位置
    
        if (strnum == -1)
        {
            break;
        }
        else
        {
    
            str = str.erase(strnum, tmpnum);//删除指定字符串
    
        }
    }
    return str;
    

    }

    //指定字符串后面插入字符串 //str是字符串,tmp是指定字符串,text是插入内容 string CStr::Insertstr(string str, string tmp, string text) { string s;

    int strcount = str.length();
    int tmpcount = StrTmpNum(str, tmp);//字符串中有多少个指定字符串
    if (tmpcount == -1)
    {    
        s = str;    
    }
    else
    {
        for (int i = 0; i < tmpcount; i++)
        {
            int tmpnum = str.find(tmp) + tmp.length();//指定字符串的后面
            str = str.insert(tmpnum, text);//指定字符串的后面插入text内容
            s = s + str.substr(0, tmpnum + 1);//截取字符串中插入内容前面的字符串
            str = str.substr(tmpnum + 1, str.length());//刷新str字符串
        }
    }
    
    return s;
    

    } c++写的看看对你有用吗

    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 求局部放电案例库,用于预测局部放电类型
  • ¥100 QT Open62541
  • ¥15 stata合并季度数据和日度数据
  • ¥15 谁能提供rabbitmq,erlang,socat压缩包,记住版本要对应
  • ¥15 Vue3 中使用 `vue-router` 只能跳转到主页面?
  • ¥15 用QT,进行QGIS二次开发,如何在添加栅格图层时,将黑白的矢量图渲染成彩色
  • ¥50 监控摄像头 乐橙和家亲版 保存sd卡的文件怎么打开?视频怎么播放?
  • ¥15 Python的Py-QT扩展库开发GUI
  • ¥60 提问一下周期性信信号的问题
  • ¥15 jtag连接不上fpga怎么办