将char数组转换为整数c编程

时间:2017-05-10 09:51:55

标签: c arrays compare min

问题:用户以24小时格式输入时间。 Array也以24小时格式列出了不同的时间。我想将用户输入的数字与最接近用户输入时间的时间进行比较。无论哪个数字最接近用户输入的时间都将显示在屏幕上。我一直在公司工作一夜之间工作,并试图理解这背后的编程。谁能帮我?顺便说一句,我刚刚开始这个C编程课程。如果你看到任何看起来像C#代码的东西,那是因为我还没有学到足够的东西。这是我到目前为止所做的:

#include <stdio.h>
#include <stdlib.h>

int main(void) {

    int hours, mins; //24 hour time to be entered by user

    int bestTime = scanf("%d:,%d", &hours, &mins);  //best time for user departure

    char* depart [8] = {"8:00", "9:43", "11:19", "12:47", "14:00", "15:45", "19:00", "\0"}; //times available for departure

    int counter; //count number of times to loop
    printf("Please Enter The Best Time For Your Flight In 24 Hour Format.\n");
    scanf("%d:,%d", &hours, &mins);

    for(counter = 0; counter <  ; counter++){
        if(bestTime < depart[counter]){
            bestTime = depart[counter];
        }
    }

    return bestTime;
}

2 个答案:

答案 0 :(得分:0)

你可以创建一个转换格式字符串的函数&#34; hh:mm&#34;分钟来自&#34; 00:00&#34;。然后用它来做所有的比较。

该功能的一个实现可以是

<uses-permission android:name="android.permission.INTERNET"></uses-
permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true"></supports-screens>

<application
    android:allowBackup="true"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:largeHeap="true"
    android:gravity="center"
    android:label="See ME First"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity"
        android:screenOrientation="portrait">
    <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".Webview"
        android:configChanges="keyboardHidden|screenSize|orientation">
    </activity>
   </application>
    </manifest>

在所有字符串上调用此函数。它们会给你无符号整数。用它来查找最接近输入的数字。 (以类似的方式将输入转换为此格式)。

要清楚地将输入扫描为

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:gravity">center</item>
 </style>

答案 1 :(得分:0)

  

这个想法:

     
      
  • 从用户那里抽出时间后,将所有内容转换为分钟。
  •   
  • 获取出发阵列的每个元素,使用atoi()将其转换为整数。
  •   
  • 将出发时间转换为分钟,并将它们放入一个整数数组中。
  •   
  • 现在将用户输入的总分钟数与数组中的总分数进行比较。这很简单;你比较一下   减去离境总数的绝对值   输入总数。最低的绝对值是您最接近的。为此,我   写了一个函数,返回里面最近元素的索引   阵列。
  •   
  • 我显示与您的初始离开字符串数组相等的最接近的值。
  •   
  • 注意:我假设您有7次出发时间。
  •   
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>

int findClosest(int * , int);

int main(void) {

    int hours,mins,total; //24 hour time to be entered by user
    char computationHours[3],computationMins[3];
    int computationHoursInt,computationMinsInt,computationTotal;

    int bestTime; //best time for user departure
    int index;
    char * depart[8] = {
        "8:00",
        "9:43",
        "11:19",
        "12:47",
        "14:00",
        "15:45",
        "19:00",
        "\0"
    }; //times available for departure
    int departures[7];
    int counter; //count number of times to loop
    printf("Please Enter The Best Time For Your Flight In 24 Hour Format.\n");
    scanf("%d:%d",  & hours,  & mins);
    total = (hours * 60) + mins;
    for (counter = 0; counter < 7; counter++) {

        if (strlen(depart[counter]) == 4) {
            //Like 8:00
            strncpy(computationHours, depart[counter], 2);
            strncpy(computationMins, depart[counter] + 2, 2);
            computationHoursInt = atoi(computationHours);
            computationMinsInt = atoi(computationMins);
            computationTotal = (computationHoursInt * 60) + computationMinsInt;
        } else {
            //Like 19:00
            strncpy(computationHours, depart[counter], 2);
            strncpy(computationMins, depart[counter] + 3, 2);
            computationHoursInt = atoi(computationHours);
            computationMinsInt = atoi(computationMins);
        }
        computationTotal = (computationHoursInt * 60) + computationMinsInt;
        departures[counter] = computationTotal;
    }

    index = findClosest(departures, total);
    printf("Closest timing is: %s", depart[index]);
    return 0;
}

int findClosest(int values[], int n) {
    int dist = abs(values[0] - n),closest;
    int size = 7;
    for (int i = 1; i < size; ++i) {
        if (abs(values[i] - n) < dist) {
            dist = abs(values[i] - n);
            closest = i;
        }
    }
    return closest;
}