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

标签 c string buffer

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

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

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

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/

相关文章:

c - 为什么即使目标缓冲区为零,strncpy 也能够复制源字符串?

objective-c - 根据 C/Objective-C 中的 Z 分数找到非常精确的百分位数?

c# - 正则表达式捕获带有目标短语的句子

c - 设置最小缓冲区大小

c# - 将字符串拆分为最大长度的行而不打断单词的最佳方法

python - 不需要的空白导致列扭曲

c - 从c中的文件流中获取数据

C 中的字符频率直方图

C:简单快速的国际象棋哈希表?

c - 在 C 应用程序中包含第三方库