带字符串循环并输出到C语言中的唯一配置?

时间:2019-04-09 17:39:50

标签: c string loops variables

因此,我大约一年都没有使用过C,而我的经验是从0开始,对计算机科学一无所知。从字面上看,首先是从零开始编写诸如strlen和split空格之类的功能,基本上是在纯C语言中创建我自己的库。

我现在想使用C解决以下问题: 我正在设计一个游戏,并且其中有4个值的单位。 3个边各具有任意组合的值x / y / z,第4个值是等于最重复符号的幂(如果x = 3;幂= 3 /如果x / y / z(= 1 )功率= 1 ...)。 我要执行的操作是在唯一的计数器中输出具有重复功率1 2和3的总单位数...我该如何处理? 到目前为止,我有:

char U[] = "111";  

int result;

void P()

   while (strcmp(U, "333") !=0);

        while (char U[0] <= "3");

   char U[0]++;

...依此类推,直到所有值都达到333。

我如何计算不同的功率水平单位,并且不仅可以说功率水平2的总单位为15,还可以是什么配置(例如1/1/3或x / x / z)?

请问我愚蠢的问题,如果已经有人回答了涵盖此类问题的问题,我只是不知道该如何措辞。...

编辑:实际上,我正在寻找的是一个函数(程序?因为我不想在编译时输入),它会循环字符串(1-3)中的3个值中的每个值,分别存储和将唯一配置(1/1/2 2/1/1 1/2/1)的总数输出为一个数字,同时对包含相同值1、2或3的配置总数进行计数。

1 个答案:

答案 0 :(得分:0)

如果我很了解您的代码

char U[] = "111";

void P()

  while (char U[] <= "333");

       while (char U[0] <= "3"

  char U[0]++;

您实际上想要的是这样的东西:

char U[] = "111";

void P()
{
  while (strcmp(U, "333") <= 0)
    while (U[0] <= '3')
       U[0]++;
}

无论如何,嵌套的 while 都没有用,您可以拥有

char U[] = "111";

void P()
{
  while (strcmp(U, "333") <= 0)
    U[0]++;
}

P 返回时的值是“ 411”,是您期望的值吗?


全部放入程序中

#include <stdio.h>
#include <string.h>

char U[] = "111";

void P()
{
  while (strcmp(U, "333") <= 0)
    U[0]++;
}

int main()
{
  P();

  puts(U);
  return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall s.c
pi@raspberrypi:/tmp $ ./a.out
411

根据您的评论,如果我很好地理解您想要一个函数,该函数可以获取3个字母的字符串并返回重复其中任何一个字母的最大时间

可以是:

#include <stdio.h>
#include <string.h>

int count(const char * s)
{
  if (s[0] == s[1])
    return (s[0] == s[2]) ? 3 : 2;

  return ((s[0] == s[2]) || (s[1] == s[2])) ? 2 : 1;
}

int main(int argc, char ** argv)
{
  if ((argc != 2) || (strlen(argv[1]) != 3))
    printf("usage: %s <string of 3 characters>", *argv);
  else
    printf("%d\n", count(argv[1]));

  return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out aze
1
pi@raspberrypi:/tmp $ ./a.out aaz
2
pi@raspberrypi:/tmp $ ./a.out aza
2
pi@raspberrypi:/tmp $ ./a.out azz
2
pi@raspberrypi:/tmp $ ./a.out aaa
3

再次编辑以使用3个字母(程序中的1、2或3个)中的3个字母来做所有可能的事情:

#include <stdio.h>
#include <string.h>

int count(const char * s)
{
  if (s[0] == s[1])
    return (s[0] == s[2]) ? 3 : 2;

  return ((s[0] == s[2]) || (s[1] == s[2])) ? 2 : 1;
}

int main()
{
  char cnt[4] = { 0 }; /* index 0 not used */
  char s[3];

  for (int i = '1'; i <= '3'; ++i) {
    s[0] = i;
    for (int j = '1'; j <= '3'; ++j) {
      s[1] = j;
      for (int k = '1'; k <= '3'; ++k) {
        s[2] = k;
        cnt[count(s)] += 1;
      }
    }
  }

  printf("number of possibilities to have no repetition (count == 1) : %d\n", cnt[1]);
  printf("number of possibilities to have 2 letters equals (count == 2) : %d\n", cnt[2]);
  printf("number of possibilities to have all letters equals (count == 3) : %d\n", cnt[3]);

  return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out
number of possibilities to have no repetition (count == 1) : 6
number of possibilities to have 2 letters equals (count == 2) : 18
number of possibilities to have all letters equals (count == 3) : 3