字符串到数组和在字符串中定位字符

时间:2017-05-19 12:16:52

标签: c

我正在开发一个程序,其输入是9个数字的ID: 程序检查id是否正确: -

  1. 检查字符串是否仅由数字组成。
  2. 每个数字的权重为1或2,因此它应为1 2 1 2 1 2 1 2 1
  3. 乘以重量和数字
  4. 如果数字大于9,则添加形成它的数字。
  5. 如果数字是从10乘以那么ID正确..
  6. 示例: - 1 7 9 3 7 9 2 5 0-ID

    1 2 1 2 1 2 1 2 1-Weight

    1 14 9 6 7 18 2 10 0-num x weight

    1 5 9 6 7 9 2 1 0-(4)

    sum = 40然后它是一个正确的ID。

    我写了大部分但后来我发现它必须是一个字符串。所以我的问题是:

    1. 有没有办法将字符串放入数组?就像用它做一样 数组更容易。
    2. 我如何在字符串中找到一个地方?就像我想要第三个 字符串中的字符如何找到它?。
    3. 这里是我做的代码还没有工作,它需要很多改变,但我想我还是会把它放进去: -

      #include<stdio.h>
      #define N 9
      void input(int num[N]);
      int check(int num[N]);
      int main()
      {
          int num[N],a;
          input(num);
          a = check(num);
          if (a = 1)
              printf("ID is correct");
          else printf("ID is NOT correct");
      
      }
      void input(int num[N])
      {
          int i;
          printf("Enter your ID (9digits) :-");
          for (i = 0;i < N;i++)
              scanf("%d",num[i]);
      }
      int check(int num[N])
      {
          int w[N] = { 1,2,1,2,1,2,1,2,1 },wxnum[N],i,tota[N],sum,g;
          for (i = 0;i < N;i++)
              wxnum[i] = num[i] * w[i];
          for (i = 0;i < N;i++)
          {
              if (wxnum[i] > 9)
                  tota[i] = wxnum[i] / 10 + wxnum[i] % 10;
              else tota[i] = wxnum[i];
          }
          sum = tota[0] + tota[1] + tota[2] + tota[3] + tota[4] + tota[5] + tota[6] + tota[7] + tota[8];
          g = sum % 10;
          if (g = 0)
              return 1;
          else
              return 0;
      
      }
      

      感谢大家的帮助。

1 个答案:

答案 0 :(得分:0)

您可以通过

获取字符串
/*N is defined as 9 in your code.*/
/*Considering there is always a '\0' in every string, we should allocat N + 1 slot for your nine numbers and the extra '\0'.*/

char chStr[N + 1];    
scanf("%s", chStr);

获得字符串后,您可以利用字符值&#39; 0&#39; - &#39; 9&#39; (在ASCII表中它们的值相应地从48到57),并通过这样做轻松地将字符转换为整数:

int i = 0;
for (i = 0; i < N; i++)
{
  chStr[i] = chStr[i] - '0';
}

如果您限制类型,可以通过添加额外的两行将这些char值转换为int值:

int num[N];
int i = 0;
for (i = 0; i < N; i++)
{
  chStr[i] = chStr[i] - '0';
  num[i] = (int) chStr[i];
}

请注意我的代码没有检查用户输入的验证。为了使其更安全,您可以使用

scanf("%9s", chStr);

声明用户可以输入的最大长度。