Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将字符附加到数组中并将其标记为C_C_Arrays_String_Char - Fatal编程技术网

如何将字符附加到数组中并将其标记为C

如何将字符附加到数组中并将其标记为C,c,arrays,string,char,C,Arrays,String,Char,在我的主要功能中,我使用的是字母(ch)。我正在尝试将一些字母字符变成字符串或标记。在使用append函数之前,它只需打印出所有字符 //output 000: u 001: s 002: e 003: . 004: s 005: y 006: s 007: t 008: e 009: m 010: . 011: i 012: o 013: ; 我发现了一个附加函数,可以将字母字符添加到数组中,但它会像金字塔一样打印出来。如何在完成追

在我的主要功能中,我使用的是
字母(ch)
。我正在尝试将一些字母字符变成字符串或标记。在使用
append
函数之前,它只需打印出所有字符

//output  
000: u  
001: s  
002: e  
003: .  
004: s  
005: y  
006: s  
007: t  
008: e  
009: m  
010: .  
011: i  
012: o  
013: ;  
我发现了一个附加函数,可以将字母字符添加到数组中,但它会像金字塔一样打印出来。如何在完成追加后获得最后一个结果,并使用
'\0'
将其拆分?它不应该已经在
append
函数中按首字母
'\0'
将其拆分了吗?我朝着正确的方向走了吗?在空值之后的拆分中,是否缺少一些内容

//output   
000: u  
001: us  
002: use  
003: .  
004: uses  
005: usesy  
006: usesys  
007: usesyst  
008: usesyste  
009: usesystem  
010: .  
011: usesystemi  
012: usesystemio  
013: ;  

//main.c
#定义\u CRT\u安全\u无\u警告
#包括
#包括
#包括“Chu type.h”
文件*文件;
字符行[400];
int line_num;
char ch;
无效附加(字符*行,字符ch)
{
整数长度=strlen(直线);
行[长度]=ch;
行[长度+1]='\0';
}
int main()
{
file=fopen(“source.txt”、“r”);
而((ch=fgetc(文件))!=EOF)
{
if(空格(ch))
{
printf(“%03d:%c\n”,第_num++,ch行);
}
if(字母(ch))
{
追加(行,ch);
printf(“%03d:%s\n”,第_num++,第行);
}
if(分离器(ch))
{
printf(“%03d:%c\n”,第_num++,ch行);
}
}
返回0;
}

//Chu type.h
int空间(int-ch)
{
回报率((ch='');
}
整数字母(整数字母)
{

输入
if(space(ch))
if(separator(ch))
时返回(((ch>='a')&&&(ch='a')&&&(chPrint
line
),而不是在查找行的每个字符后返回。然后,将第一个字节设置为
0
,使字符串再次为“空”:

您可能还应该将
else
预加到
if(字母(ch))
if(分隔符(ch))
。这可能会稍微提高性能,因为这些条件都不重叠

注意,这是假设分隔符和空间不在一起,但这不一定重要

这是一个简化版本,不需要重复代码:

        if(letter(ch))
        {
            append(line, ch);
        }
        else
        {
            printf(" %03d: %s\n", line_num++, line);
            line[0] = '\0';
        }
        if(space(ch) || separator(ch))
        {
            printf(" %03d: %c\n", line_num++, ch);
        }

接下来,请发布输入/输出的文本,而不是输入/输出的图片。这允许其他人验证您的结果,如果您有200-300个字符的存储空间,则仅您的第二个图像
aOXPB.png
就需要
13534
字节来存储
:)
可以。我没有意识到这一点。谢谢有没有办法将实际的字母作为一个整体存储?现在null之前的printf会在将其置零之前打印之前的字母等。但是当没有字母时,格式会变得有点棘手。为了简单起见,我没有添加数字(ch)、运算符(ch)当我问起这个问题时,它似乎假设字母chars总是在其他字母之前?开始用空格(ch)和neli(ch)来搞笑又名“\n”。我尝试使用strcmp函数将字母与另一个具有无效关键字的数组进行比较,该数组有效但重复。@Lordravenblack您可以提出另一个问题,并提供指向此数组的链接以提供上下文。
//ch_type.h

int space(int ch)
{
    return ((ch == ' '));
}

int letter(int ch)
{
    return (((ch >= 'a') && (ch <= 'z')) || (ch >= 'A') && (ch <= 'Z'));
}


int separator(int ch)
{
    return ((ch == '#') || (ch == '(') || (ch == ')') || (ch == '{') || (ch == '}') || (ch == '[') || (ch == ']')
        || (ch == '<') || (ch == '>') || (ch == '.') || (ch == ',') || (ch == ':') || (ch == ';'));
}
        if(space(ch))
        {
            printf(" %03d: %s\n", line_num++, line);
            line[0] = '\0';
            printf(" %03d: %c\n", line_num++, ch);
        }
        if(letter(ch))
        {
            append(line, ch);
        }
        if(separator(ch))
        {
            printf(" %03d: %s\n", line_num++, line);
            line[0] = '\0';
            printf(" %03d: %c\n", line_num++, ch);
        }
        if(letter(ch))
        {
            append(line, ch);
        }
        else
        {
            printf(" %03d: %s\n", line_num++, line);
            line[0] = '\0';
        }
        if(space(ch) || separator(ch))
        {
            printf(" %03d: %c\n", line_num++, ch);
        }