как поймать пустую строку между двумя \n\n
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *token = NULL;
char string1[] = "first Line\n\nthird line\nOne more line";
token = strtok(string1, "\n");
while (token != NULL) {
size_t line = strlen(token);
printf("Empty line%s\n", token);
token = strtok(NULL, "\n");
}
return 0;
}
Вопрос: как распознать строку два, которая является пустой, между
first Line \n\n third line\n.
Ответы (2 шт):
Автор решения: Кирилл Малышев
→ Ссылка
Можно использовать функцию strsep.
int main(int argc, char *argv[])
{
char *token;
char string1[] = "first Line\n\nthird line\nOne more line";
char buf[100];
sprintf(buf, "%s", string1);
char *end = buf;
while ((token = strsep(&end, "\n")) != NULL) {
if (token[0] == '\0') {
printf("Empty token\n");
} else {
printf("%s\n", token);
}
token = end;
}
return 0;
}
Она не определена в стандарте, поэтому, если её на вашей платформе нет, можно воспользоваться такой реализацией:
#ifndef HAVE_STRSEP
char * strsep(char **sp, char *sep)
{
char *p, *s;
if (sp == NULL || *sp == NULL || **sp == '\0') return(NULL);
s = *sp;
p = s + strcspn(s, sep);
if (*p != '\0') *p++ = '\0';
*sp = p;
return(s);
}
#endif
Автор решения: user7860670
→ Ссылка
Можно воспользоваться стандартной функцией strchr:
#include <stdio.h>
#include <string.h>
int main()
{
char string1[] = "first Line\n\nthird line\nOne more line";
char const sep = '\n';
char * psz = string1;
for (;;)
{
char * const token = strchr(psz, sep);
if (token)
{
*token = '\0';
printf("%s\n", psz);
*token = sep;
psz = token;
++psz;
}
else
{
printf("%s\n", psz);
break;
}
}
return 0;
}