在循环函数的每次迭代开始时获取需要为空的char

时间:2016-03-09 17:44:52

标签: c++ string algorithm

我创建了一个名为aux的字符,我只需要作为变量来处理a字符的后缀,并检查这些后缀是否是b字符的前缀。所以,我试图在每次迭代时覆盖这个aux字符(或者如果我可以说,为了使它“空”并准备下一次迭代,当程序将在其中写入迭代中的字符i+1)这样我就不需要大尺寸的aux,而且我真的不想冒险从前一次迭代中获得aux个字符。那么,我如何将它变为空,或者如何覆盖char,特别是如果在i+k迭代中程序将发送比前一次迭代更少的字符,所以它不能真正覆盖,因为它有更少的字符,我们最终可能会在aux中的2次迭代中找到字符。以下是我试图这样做的路线。 minstrlen(a)strlen(b)之间的最小值,nastrlen(a)。算法运行正常,但我要为{{{ 1}} ...就像aux

aux[100]

3 个答案:

答案 0 :(得分:2)

aux的第一个元素设置为\0或使用memset(aux, 0, sizeof(aux))

编辑:

aux[0] = '\0';

将结束符号放在字符串的开头,使其为空。因此,如果再次复制到此(空)字符串,复制的数据将覆盖以前写入的数据,从而提高内存处理效率,这是此问题的确切目标。

答案 1 :(得分:1)

根据您的代码,变量conn = psycopg2.connect("dbname='test1' user='postgres' host='localhost' password='123'") cur = conn.cursor() query = "INSERT INTO product_info (product_name) VALUES (%s);" data = ("ss") cur.execute(query, data) conn.commit() 必须足够大,以包含aux指向的整个变量,因此,如果您已声明要变量,例如{ {1}}那么你还需要a,它不能更小......
另一方面,要在每次迭代时重置char a[50];,只需将char aux[50];写为循环内的第一行......

答案 2 :(得分:1)

您在nanb填充输入之前正在初始化ab,因此您将从strlen获得随机大小。试一试,你会看到。因此,您的算法会中断。

尝试将其移到输入下方。

cout << "Define a:";
cin >> a;
cout << "Define b:";
cin >> b;
cout << endl;

na = strlen(a);
nb = strlen(b);

if (na < nb)
    min = na;
else
    min = nb;

我已尝试使用此订单,它按预期工作,无需aux[0] = '\0';