C语言-求有字符的行数
每个作文都以一行#开始。随后是若干行字符,然后再以#结束。作文中不会出现#。
输出每个作文有多少行。(空行不算)
输入:
#
I love C programming language!
Yes, I'm xiaomeng.
haha!
another paragraph. I'm so smart!
bye!
#
输出:5
怎么敲代码呀!!特别是对空行怎么处理呀 本帖最后由 1471590985 于 2020-11-6 22:49 编辑
随便写的,可能有更简单的方法
对空行的处理就是看这个'\n'的前一个字符是否为'\n'或'#'还要看他的前面所有空格前的字符是否为'\n'或#
如果是'\n'的话那就是中间的空行
如果是'#'的话那就是文章开头的空行
改了下代码,现在应该是没什么问题了
#include<stdio.h>
#include<string.h>
void main()
{
int i, j, count = 0,space = 0;
char s[] = "#\nI love C programming language!\n\nYes, I'm xiaomeng. \nhaha!\nanother paragraph. I'm so smart!\n\nbye\n\n#eqd";
for(i=0;(size_t)i<strlen(s);i++)
{
if(s == '#') //出现#开始计数
{
for(j=i+1;(size_t)j<strlen(s);j++)
{
if(s == ' ') //计算连续空格的个数以便于排除空格的影响
{
space++;
continue;
}
if(s == '#') //再次出现#停止
{
if(s != '\n' && s != '\n')
count++;
break;
}
if(s == '\n') //遇到换行符
{
if(s != '\n' && s != '#' && s != '\n'&& s != '#') //判断是否为空行
count++;
}
space = 0;
}
}
break;
}
printf("%s", s);
printf("\n%d\n",count);
}
逐个字符读取并且处理
#include <iostream>
using namespace std;
int main()
{
char c;
while ((c = cin.get()) != '#');
bool last_is_line = false;
int count = 0;
while ((c = cin.get()) != '#')
{
if (c == '\n')
{
if (!last_is_line)
count++;
last_is_line = true;
}
else
{
last_is_line = false;
}
}
cout << count - 1 << endl;
return 0;
}
页:
[1]