鱼C论坛

 找回密码
 立即注册
查看: 3966|回复: 16

[技术交流] 茶 余 饭 后,逛逛论坛,写写代码,悠哉悠哉!

[复制链接]
发表于 2011-8-1 18:36:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zfzhuman123 于 2011-8-1 18:37 编辑

一、编写一个程序,从标准输入一行一行的读取文本,并完成如下任务:如果文件中有两行或更多行相邻的文本内容相同,那么就打印出其中一行,其余的行不打印,你可以假设文件中的文本行在长度上不会超过128个字符(127个字符加上用于终结文本行的换行符)。
考虑下面的输入文件。
This is the first line.
Another line.
And another.
And another.
And another.
Still more.
Almost done now --
Almost done now --
Another line.
still more.
Finished!
假定所有的行在尾部没有任何空白 (它们在视觉上不可见,但它们却可能使临近两行在内容上不同),根据这个输入文件,程序应该产生下列输出:
And another
Almost done now --
所有内容相同的相邻文本行有一行被打印。注意“Another line.” 和 “still more.”。并未被打印,因为文件中它们虽然各占两行,但相同文本行的位置并不相邻。
提示:使用gets函数读取输入行,使用strcpy函数来复制它们。有一个叫做strcmp的函数接受两个字符串参数并对它们进行比较。如果两者相等,函数返回0,如果不等,函数返回非零值。

二、编写函数
int palindrome ( char *string );
如果参数字符是个回文,函数就返回真,否则就返回假。回文就是指一个字符串从左向右读和从右向左读是一样的。函数应该忽略所有的非字母字符,而且在进行字符比较时不用区分大小写。

三、编写一个程序,对标准输入进行扫描,并对单词“fishc”出现的次数进行技术。进行比较时应该区分大小写,所以“FISHC”和“Fishc”并不计算在内。你可以认为各单词由一个或多个空格字符分割,而且输入行在长度上不会超过100个字符。计数结果应该写到标准输出上。

先写这三个吧,有难有易!


评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +5 收起 理由
小甲鱼 + 10 + 10 + 5 赞一个!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
头像被屏蔽
发表于 2011-8-1 21:35:40 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 10:22:58 | 显示全部楼层
不是吧!都是书上的啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 10:38:59 | 显示全部楼层
俺贴下第三个吧  手写的  特别嫩delete_space编的有点蛋疼 调试好久

------------------------------------------------------------------------------------------------------------------
  1. #include <stdio.h>


  2. void read_line(char str[],int n);
  3. int censor(char s[]);
  4. void delete_spaces(char *s);
  5. void read_line(char str[]);


  6. int main()
  7. {
  8.        char str[100];
  9.         read_line(str);
  10.         
  11.         delete_spaces(str);
  12.         
  13.         int i = censor(str);
  14.         printf("%d", i);

  15.         return 0;

  16. }

  17. void read_line(char str[])
  18. {
  19.     char ch;
  20.     int i = 0;

  21.     while(1)
  22.     {
  23.         if(i > 100 || (ch = getchar()) == '\n')
  24.             break;
  25.         str[i++] = ch;
  26.     }
  27.     str[i] = '\0';
  28. }

  29. void delete_spaces(char *s)
  30. {
  31.    
  32.     int i;
  33.     int j = 0;
  34.     for(i = 0; s[i] != '\0'; i++)
  35.     {
  36.         if(s[i] != ' ')
  37.         {
  38.             j++;
  39.             if(s[i+1] != ' ')
  40.                 s[j] = s[i+1];
  41.             
  42.             continue;
  43.         }
  44.         if(s[i +1] == ' ')
  45.         {
  46.             continue;
  47.         }
  48.         else
  49.         {
  50.             s[j] = s[i + 1];
  51.         }

  52.     }
  53.       

  54.    
  55.     if(j == 0)
  56.         return;
  57.     s[j] = '\0';
  58. }




  59. int censor(char s[])
  60. {
  61.     int i;
  62.     int cout=0;
  63.     for (i = 0; s[i] != '\0'; i++)
  64.     {
  65.         if (s[i] == 'f' && s[i+1] == 'i' && s[i+2] =='s' && s[i + 3] =='h' && s[i + 4] == 'c')
  66.             cout++;
  67.          
  68.     }
  69.     return cout;
  70. }


复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 13:27:57 | 显示全部楼层

void read_line(char str[],int n);
int censor(char s[]);
void delete_spaces(char *s);
void read_line(char str[]);
很不错,能不能再优化下!借助一些库函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 14:48:57 | 显示全部楼层
我学的C现代方法基本上不用库函数的  楼主贴下第三题答案我看下思路。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 14:50:58 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>

  4. char const      space[] = " \n\t\v\f\r";

  5. int main(void)
  6. {
  7.         char    ch[100];
  8.         int     count = 0;
  9.         while (  gets ( ch ) ) {

  10.                 char    *word;
  11.                 for ( word = strtok ( ch, space );
  12.                         word != NULL;
  13.                         word = strtok ( NULL, space ) ) {
  14.                         if ( strcmp ( word, "fishc" ) == 0 )
  15.                                 count += 1;
  16.                 }
  17.         }
  18.         printf ("the count is %d\n", count );
  19.         return 0;
  20. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 18:27:19 | 显示全部楼层
本帖最后由 weixianlang 于 2011-8-2 18:41 编辑

  1. #include <stdio.h>
  2. #include <STRING.H>
  3. void main()
  4. {
  5. char inp[50];
  6. char temp[50] = {0};
  7. int check = 0;
  8. gets(inp);
  9. while(strcmp(inp,"exit"))
  10. {
  11.   if ( (strcmp(inp,temp)) == 0)
  12.   {
  13.    if (check == 0)
  14.    {
  15.     printf("output : %s\n",inp);
  16.     check++;
  17.    }
  18.   }
  19.   else
  20.     check = 0;
  21.   
  22.   strcpy(temp,inp);
  23.   gets(inp);
  24. }

  25. }
复制代码
第一个的意思是不是这样??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 18:58:46 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <STRING.H>

  3. bool nimei(char *str)
  4. {
  5.         if (strlen(str)%2 == 0)
  6.         {
  7.                 return false;
  8.         }
  9.         else
  10.         {
  11.                 int niba = strlen(str)/2;
  12.                 for (int i=0; i<niba; i++)
  13.                 {
  14.                         if ( (int)(*(str+i)) == (int)(*(str+i+niba)) );
  15.                         return true;
  16.                 }
  17.                
  18.         }
  19. }
  20. void main()
  21. {
  22.         printf("%d\n",nimei("nin"));
  23. }
复制代码
第二题是不是这个意思??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 19:23:47 | 显示全部楼层
本帖最后由 weixianlang 于 2011-8-2 19:34 编辑
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>


  4. int main(void)
  5. {
  6.         char str[100] = {0};
  7.         int fak = 0;
  8.         scanf("%s",str);
  9.         while (strcmp(str,"exit"))
  10.         {
  11.                 if (!strcmp(str,"fishc"))
  12.                 {
  13.                         fak++;
  14.                 }
  15.                 scanf("%s",str);
  16.         }
  17.         printf("%d",fak);

  18. }
复制代码
第三题是不是这个意思!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 19:35:35 | 显示全部楼层
本帖最后由 weixianlang 于 2011-8-2 19:35 编辑

>我艹一个小时候玩3题!~好玩,不玩点只是容易我忘记,哈哈哈!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 19:38:19 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <windows.h>
  4. int palindrome(char *string)
  5. {
  6.         if(stricmp(string, strrev(string)) == 0)
  7.                 return TRUE;
  8.         return        FALSE;
  9. }

  10. int main()
  11. {
  12.     char str[] = "Helleh";
  13.     if(palindrome(str))
  14.         printf("回文");

  15.     return 0;
  16. }
复制代码
第二题精简版
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-8-2 19:40:02 | 显示全部楼层
本帖最后由 weixianlang 于 2011-8-2 19:40 编辑


膜拜!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-8-2 21:12:13 | 显示全部楼层
膜拜everybody!!!{:7_157:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-24 10:17:16 | 显示全部楼层
第二个
#include<stdio.h>
#include<string.h>
int palindrome(char *string)
{
        int i,len,j=0;
        char str1[80];
        for(i=0;i<strlen(string);i++)
        {
                if(string[i]>='A'&&string[i]<='Z'||string[i]>='a'&&string[i]<='z')
                        str1[j++]=string[i];
               
        }
        str1[j]='\0';
        len=strlen(str1);
        i=0;
        while((str1[i]==str1[len-i-1])&&i<len/2)
                {
                        i++;

                }
                if(i==len/2)
                        return 1;
                else
                        return 0;
}
void main()
{
        int n;
        char str[80];
        char *string;
        string=str;
        gets(str);
        n=palindrome(str);
        printf("%d\n",n);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-24 14:37:05 | 显示全部楼层
这是哪本书上的哦?:o
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-6-28 08:50:33 | 显示全部楼层

继续精简
int palindrome(char *string)
{
       return stricmp(string, strrev(string)==0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 01:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表