gpt4 book ai didi

C 打印不需要的随机字符

转载 作者:行者123 更新时间:2023-11-30 20:19:36 25 4
gpt4 key购买 nike

我用C编写了一些代码,它的作用是输入2个字符串A,B,其中A是普通字符串,B是B中的子字符串。程序将“剪切”掉所有出现的字符串 A 内的子字符串 B。例如:

A = "asdLEONasd", B = "asd"=> C(Result) = "LEON"。

一切似乎都工作正常,除了在输出阶段打印出一些不需要的字符之后。

这里有两个例子:(不需要的字符用红笔下划线)

Example 1

Example 2

代码:

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

void main()
{
int len1, len2;

puts("Input a length for a");
scanf("%d",&len1);
// Initializing A
char a[len1 + 1];
puts("Input a");
scanf("%s" ,a);

puts("Input length for b");
scanf("%d",&len2);
//Initializing B
char b[len2 + 1];
puts("Input b");
scanf("%s" ,b);

int i, j , k, count1 = 0, count2;

for(i = 0; i < len1; i++) //Loop that goes over string a
{
count2 = 0, k = 0;
for(j = i; j < len2 + i; j++) //Loop that goes over a part of a (from i to i + len2)
{
if(a[j] == b[k])
{
count2++; //Counting how many characters match with the sub string B
}
k++;
}
if(count2 == len2) //If counted characters = len2 then we know that we found the Sub string B in A
{
count1++; //Counting each appearance of B in A
for(j = i; j < len2 + i; j++) //Loop that marks cells that represent the sub string B in A
{
a[j] = '0'; //Marking cells that are the sub string b
}
}
}

if(!count1) //If count1 remained as 0 then B does not appear in A, which means the result is A
{
puts(a);
}
else
{
j = 0;
int len3 = len1 - count1 * len2; //Determining resulting array size
char c[len3]; // Initializing array C
//Filling array C accordingly
for(i = 0; i < len1; i++)
{
if(a[i] != '0')
{
c[j] = a[i];
j++;
}
}
puts(c);
}
}

我发现最奇怪的是,例如,当我的输出数组的大小为 4 时,无论大小如何,它仍然会打印额外的字符。
我很好奇为什么会发生这种情况以及如何解决?

最佳答案

您应该考虑一个 puts 的愚蠢实现,如下所示:

void puts(char *s)
{
while (*s) //if the current character isn't 0
{
putchar(*s); //print the character
++s; //move to the next character
}
putchar('\n');
}

因此,如果数组中的最后一个字符不是 0,则上述循环将继续下去,直到后面的内存中恰好有 0 为止。

如果您无法添加此终止零(正如 Bathsheba 和您自己已经提到的),您可以使用 printf

使用 printf 系列函数时,可以使用 %s 说明符来格式化字符串(例如填充和限制其长度)。

char x[] = {'a', 'b', 'c', 'd'};
//print just abc
printf("%.*s\n", 3, x);
//print just abc
printf("%.3s\n", x);
//print just bcd
printf("%.*s\n", 3, x+1);

关于C 打印不需要的随机字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49693237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com