gpt4 book ai didi

c - 过滤一个缓冲区并将其复制到另一个 C

转载 作者:太空宇宙 更新时间:2023-11-04 05:52:27 24 4
gpt4 key购买 nike

我正在尝试读取缓冲区,复制所有非字母字符并将其转储到另一个缓冲区。

我遇到的问题是,每当遇到非数字字符时,它都不会再复制任何内容。

我尝试检测空格,使用辅助缓冲区...

int main(void)
{
char buffer[] = "103 PLUS 1";
char buffer2[] = "a";
int i, number;

memset(buffer2, 0, sizeof (buffer2));
size_t length = strlen(buffer);

fprintf(stdout,"Buffer initially: %s \n", buffer);
fprintf(stdout,"Buffer2 initially: %s \n", buffer2);

for(i=0; i<length; i++)
{
if (number = isalpha(buffer[i]) == 0)
{
strncpy(&buffer2[i], &buffer[i], 1);
}
}
fprintf(stdout, "Copied buffer is: %s \n", buffer2);
return 0;
}

提前致谢。

最佳答案

  1. 您的代码将 buffer2 的第一个元素保留为 0,表示 C 字符串的结尾。事实上,相同字符的索引在bufferbuffer2中应该是不同的,因为字符在C字符串中必须是一致的,但有些字符不会被复制。
  2. 没有必要用"a"初始化buffer。请改用 {0}
  3. 您不需要使用变量 number

精简代码:

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

int main(void)
{
char buffer[80] = "103 PLUS 1";
char buffer2[80] = {0};
int i, j = 0;

size_t length = strlen(buffer);

fprintf(stdout,"Buffer initially: %s \n", buffer);
fprintf(stdout,"Buffer2 initially: %s \n", buffer2);

for(i = 0; i < length; i++)
{
if (isalpha(buffer[i]))
{
strncpy(&buffer2[j++], &buffer[i], 1);
}
}
fprintf(stdout, "Copied buffer is: %s \n", buffer2);
return 0;
}

输出:

Buffer initially: 103 PLUS 1 
Buffer2 initially:
Copied buffer is: PLUS

关于c - 过滤一个缓冲区并将其复制到另一个 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749343/

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