如何将字符附加到数组中并将其标记为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')&&&(chPrintline
),而不是在查找行的每个字符后返回。然后,将第一个字节设置为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);
}