明堂不沾风雪 发表于 2020-11-6 20:02:23

C语言-求有字符的行数

每个作文都以一行#开始。随后是若干行字符,然后再以#结束。

作文中不会出现#。

输出每个作文有多少行。(空行不算)

输入:
#
I love C programming language!
Yes, I'm xiaomeng.
   haha!


another paragraph. I'm so smart!
bye!

#

输出:5

怎么敲代码呀!!特别是对空行怎么处理呀

1471590985 发表于 2020-11-6 21:45:36

本帖最后由 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);
}

lhgzbxhz 发表于 2020-11-7 14:48:37

逐个字符读取并且处理
#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]
查看完整版本: C语言-求有字符的行数