计算通过循环无法正常工作的行数

时间:2014-05-23 09:55:32

标签: c

我正在尝试使用2种方法计算我的C程序中wchar_t字符串的行数:第一种方法使用循环通过缓冲区计数“\ n”,第二种方法使用wcstok()但是我只得到第二种方法返回正确的行号,第一种方法总是返回0:这是我的完整程序代码:

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

const wchar_t* ret2line_template = L"\n";

int get_lines_count1(wchar_t* w){
int count=0;
int i;
for(i=0;i<wcslen(w);i++)if((w[i]==ret2line_template[0]) && (w[i+1]==ret2line_template[1]))count++;
return count;
}
int get_lines_count2(wchar_t* w){
    int count=0;
    wcstok(w, ret2line_template);
    do{count++;}while(wcstok(0, ret2line_template));
    return count;
}

int main(){
const wchar_t* s = L"00\n11\n22\n33";
const wchar_t* w;
w = calloc(sizeof(wchar_t*), wcslen(s)+1);
wcscpy(w, s);
printf("lines count from get_lines_count1 = %d\n", get_lines_count1(w)); //this returns 0: incorrect value
printf("lines count from get_lines_count2 = %d\n", get_lines_count2(w)); //this returns 4: the correct value
getch();
}

那么我的get_lines_count1函数及其循环有什么问题?如何解决这个问题?请帮忙。

1 个答案:

答案 0 :(得分:3)

如果您在换行符后跟空字符匹配,则您只在第一个函数中递增count

此:

ret2line_template[1]
条件表达式中的

正在查看第二个wchar_t:

const wchar_t* ret2line_template = L"\n";

这是零终止符。字符串中的wchar_t对都不匹配,因此结果为零。只需找一个L'\n'。如果在最后一个之后留下了字符,请再添加一个字符&#34; line&#34;到你的计数(最后一个没有L'\n'尾随的。