全局变量行为异常

时间:2019-09-22 07:18:39

标签: c

1

那是我要解决的问题。 (鉴于长度为2n的字符串,我必须以各种可能的方式将其分成两部分,而不必重复组。)

我使用的方法是:

  1. 生成字符串的所有排列。
  2. 存储可接受的排列(我同时生成“ hauy”和“ hayu”,但仅存储其中之一)。
  3. 对照存储的新排列检查新生成的排列,以过滤出重复项。
  4. 打印

(我意识到可能会有更好的方法)

stage('Run Tests') {

// Shell build step
sh """ 
#!/bin/bash
echo "Executing Fastlane test lane..."
$HOME/.fastlane/bin/fastlane tests || exit 1;
"""     
}

运行时,仅给出1行作为输出。我认为错误在于#include<stdio.h> #include<string.h> #include<stdlib.h> char *b[100000000]; int bSize = 0; void print(char *a) { int k = strlen(a); printf("M: "); for(int i=0 ; i<k/2 ; i++) { printf("%c ", a[i]); } printf("| B: "); for(int i=0 ; i<k/2 ; i++) { printf("%c ", a[k/2 + i]); } printf("\n"); } void check(char *a) { int k = strlen(a); for(int i=0 ; i<bSize ; i++) { int c = 0; for(int j=0 ; j<k/2 ; j++) { for(int m=0 ; m<k/2 ; m++) { if(a[m] == b[i][j]) { c++; break; } } } for(int j=0 ; j<k/2 ; j++) { for(int m=0 ; m<k/2 ; m++) { if(a[m + k/2] == b[i][j + k/2]) { c++; break; } } } if(c == k) { break; } else { b[bSize] = a; bSize++; print(a); } } } void swap(char *a, char *b) { char temp = *a; *a = *b; *b = temp; } void permute(char *a, int start, int end) { if(start == end) if(bSize == 0) { print(a); b[bSize] = a; bSize++; } else check(a); else { for(int i=start ; i<=end ; i++) { swap((a+start), (a+i)); permute(a, start+1, end); swap((a+start), (a+i)); } } } int main() { int n; scanf("%d", &n); char f; scanf("%c", &f); char A[n]; for(int i=0 ; i<n-2 ; i++) { char c; scanf("%c", &c); if(c == ' ' || c == 'M' || c == 'B') i--; else A[i] = c; } A[n-2] = '\0'; permute(A, 0, n-3); return 0; } 。在b[]函数中,checkb[0]总是相等的。 a永远不会超出1。我不明白为什么。

1 个答案:

答案 0 :(得分:0)

b[bSize] = a;a的值存储在b[bSize]中。 a是指向A中定义的数组main的第一个元素的指针。因此,您不必存储单个字符串,而只是存储指向A的指针,并且该指针永远不会改变。

要使用此算法,必须复制每个字符串。这需要更改b的定义方式以及如何比较字符串。 (您不能将字符串与==进行比较。)

(但是,此任务有一种更好的算法,不需要生成所有排列。)