История изменений
Исправление firkax, (текущая версия) :
int main(int argc, char * * argv) {
char buf[1000], *p;
unsigned int n, j;
n = atoi(argv[1]);
while(fgets(buf, sizeof(buf), stdin)) {
for(j=0,p=buf; j<=n && (p=strchr(p,'+')); j++,p++);
if(j==n) fputs(buf, stdout);
}
}
разумеется, для продакшн-качества надо избавиться от фиксированной максимальной длины строки (1000) и проверять что argv[1] это действительно число а не мусор, и проверять чтобы j не переполнилось, если n==(unsigned)-1 и мы нашли больше совпадений, ну и добавить поддержку строк в файле, которые не влезают в память (например строка длиной 10ГБ на 32-бит платформе; подозреваю grep такое тоже не поддерживает)
Исправление firkax, :
int main(int argc, char * * argv) {
char buf[1000], *p;
unsigned int n, j;
n = atoi(argv[1]);
while(fgets(buf, sizeof(buf), stdin)) {
for(j=0,p=buf; j<=n && (p=strchr(p,'+')); j++,p++);
if(j==n) fputs(buf, stdout);
}
}
разумеется, для продакшн-качества надо избавиться от фиксированной максимальной длины строки (1000) и проверять что argv[1] это действительно число а не мусор
Исходная версия firkax, :
int main(int argc, char * * argv) {
char buf[1000], *p;
int n, j;
n = atoi(argv[1]);
while(fgets(buf, sizeof(buf), stdin)) {
for(j=0,p=buf; p=strchr(p,'+'); j++,p++);
if(j==n) fputs(buf, stdout);
}
}