所以基本上我的问题是我试图从文本文件中读取数据,该文本文件的编号如下:“ 1 5 3 8 9 3 23 67 90”,我想按编号读取它们并将其放在一个列表或向量或数组。但是,这是我第一次使用Clojure进行编码,这就是为什么我问这个问题。
到目前为止,我确定这是不正确的。
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <limits.h>
char A[32], B[32], C[64];
int score[2][32][32];
void print_result(int d, int i, int j)
{
char c = d ? B[j] : A[i];
int s0 = i > 0 ? score[0][i-1][j] + (A[i-1] == c) : INT_MAX;
int s1 = j > 0 ? score[1][i][j-1] + (B[j-1] == c) : INT_MAX;
if(s0 <= s1 && i > 0)
print_result(0, i-1, j);
else if(j > 0)
print_result(1, i, j-1);
printf("%c", c);
}
void print_result(int i, int j)
{
if(score[0][i-1][j] < score[1][i][j-1])
print_result(0, i-1, j);
else
print_result(1, i, j-1);
}
int main()
{
fgets(A, sizeof(A), stdin);
fgets(B, sizeof(B), stdin);
int m = strlen(A) - 1; // -1 to remove LF
int n = strlen(B) - 1;
for(int j = 0; j <= n; ++j)
{
for(int i = 0; i <= m; ++i)
{
score[0][i][j] = !i && !j ? 0 : std::min(
i > 0 ? score[0][i-1][j] + (A[i-1] == A[i]) : INT_MAX,
j > 0 ? score[1][i][j-1] + (B[j-1] == A[i]) : INT_MAX
);
score[1][i][j] = !i && !j ? 0 : std::min(
i > 0 ? score[0][i-1][j] + (A[i-1] == B[j]) : INT_MAX,
j > 0 ? score[1][i][j-1] + (B[j-1] == B[j]) : INT_MAX
);
}
}
printf("repetitions: %d\n", std::min(score[0][m-1][n], score[1][m][n-1]));
print_result(m, n);
printf("\n");
return 0;
}
但是,这只会将文件读取为一个字符串。所以我决定添加这一行
(def nums11 (slurp "C:\\Users\\XXX\\Desktop\\100.txt"))
在我将它们拆分为列表,向量或数组之后,有什么方法可以添加它们。
或者也许有一种简单的方法可以做到这一点?
谢谢。
答案 0 :(得分:3)
您已经走对了路,所以我将尝试解释下一步:
函数<input type="text">
<input type="number">
<input type="url">
<button>Get it</button>
返回字符串clojure.string/split
。 Clojure中的向量是实现Java接口vector
的 collection ,因此,如果您所需要做的就是将文件的内容转换为代表数字的String集合(以将其转换为实际数字,继续阅读)。
可能您想将元素作为实际数字进行操作。在Clojure中,您需要使用一些函数将每个String转换为数字(例如将java.util.List
转换为实际数字34)。有两种简单的方法:使用Java互操作并调用"34"
或使用Clojure提供的函数,该函数能够读取String并返回它表示的任何内容(例如Integer.parseInt(...)
)。
由于我们需要对表示数字的字符串列表的每个元素调用函数(read-string
),因此我们将使用read-string
,该函数需要一个函数map
和一个集合f
,并在xs
的每个元素上调用函数f
,将结果作为另一个列表返回。
如果我们将它们粘合在一起,将类似于以下内容(我将使用xs
为中间结果命名)
let
...这里的数字列表位于(let [file-contents (slurp "C:\\Users\\XXX\\Desktop\\100.txt")
nums-as-strings (clojure.string/split file-contents #" ")
numbers (map read-string nums-as-strings)]
上;现在您可以对它们执行操作,例如将它们全部求和:
numbers
我已经掩盖了许多小细节,但这应该使您处于正确的轨道。