使用c计算文件中的新行c
正文:Hi\r\n how is it going \r\nareyouoay\r\n
;答案应该是3,新的生产线并不意味着\n
这意味着严格\r\n
,所以只是有\n
不好使用c计算文件中的新行c
,这里是我的尝试,我究竟做错了什么?
FILE *fp = fopen(fileName, "r");
int c, lastchar;
int lineCount= 0;
int i;
while ((c=fgetc(fp)) != EOF) {
if (c == 'r' && lastchar == '\\' && c+1== '\\' && c+2=='n')
lineCount++;
lastchar = c;
i++;
}
该文本的输出应该是3。
如果你必须在同一时间做你的搜索字符,你可以使用类似下面的代码
int c;
int lineCount= 0;
int i = 0;
char next[] = {'\\', 'r', '\\', 'n' };
while ((c=fgetc(fp)) != EOF) {
if (c != next[i]) {
i = 0;
}
else {
if (i == sizeof(next) - 1) {
i = 0;
lineCount++;
}
else {
i++;
}
}
}
为界输入文件的大小,你会更好读取整个文件到内存中,然后使用strstr。或者,对于较大的输入,将块读入内存中,使用strstr
并考虑如何避免在块边界上丢失匹配。
只是'\ n'也会工作 –
那不是我想要做的,我想专门计算\ r \ n并将其作为一个字符串计算,因此如果单个行有Hi \ r \ n它怎么样\ r \ nareyouoay \ r \ n输出应该是3,即使它全部在一行上。要做到这一点,我需要阅读每个字符,并确保所有字符都发生。 – user1888502
@simonc请阅读以上 – user1888502
你做错了什么是,\n
是1个字符,不是多个字符。
因此来算,你得行数做到这一点:
while ((c = fgetc(fp))!= EOF){
if(c == '\n') lineCount++;
}
printf("No. of lines = %d", lineCount);
那不是我想要做的,我想特别指出\ r \ n并将其作为一个字符串计算,因此如果单个行有Hi \ r \ n它将如何发生\ r \ n \ n \ n \ r \ n输出应该是3,即使它全部在一行上。要做到这一点,我需要阅读每个字符,并确保所有字符都发生。在我的方法中,计算线的方式不是\ n,\ n \ n将是文本,但如果用户有\ r \ n,则表示新行 – user1888502
请阅读以上 – user1888502
字符\r
和\n
是单个字符,所以读你输入的时候,你不会找到他们\\
字符。而且,如果你在Windows上,你应该用模式"rb"
打开你的文件以二进制模式打开它,否则运行时将去掉\r
字符。
FILE *fp = fopen(fileName, "rb");
int lastchar = 0;
int lineCount = 0;
int c;
while ((c = fgetc(fp)) != EOF) {
if (lastchar == '\r' && c == '\n')
lineCount++;
lastchar = c;
}
printf("line count: %d\n", lineCount);
如果你真的想算四个大字\\
r
\\
n
继承,那么你可以这样做的(似乎很奇怪,但也许你的输入已经引用的字符序列):
FILE *fp = fopen(fileName, "rb");
char prevchars[4] = { 0, 0, 0, 0 };
char fingerprint[4] = { '\\', 'r', '\\', 'n' };
int lineCount = 0;
int c, i;
while ((c = fgetc(fp)) != EOF) {
if (memcmp(prevchars, fingerprint, 4) == 0)
lineCount++;
for (i = 1; i < 4; i++)
prevchars[i - 1] = prevchars[i];
prevchars[3] = (char)c;
}
printf("line count: %d\n", lineCount);
这应该是一个正确的答案,但问题是试图问如何搜索''\\ r \\ n“'即4个独立的字符。其他两个答案都采用了与您的方法相同的方法,因此问题不尽如人意。 – simonc
在您的文本中,\ n表示两个字符'\'和'n'连接,或者它表示单个字符'\ n'(ascii 10)? –
“你好\ n如何\ r \ nare \ ryou \ r \ n”的答案是 –
答案是两个 – user1888502