zoukankan      html  css  js  c++  java
  • The Uncle_b's First Love

    Description

          ACM成立大会之后,uncle_b被其中一个大一女孩深深地吸引,但腼腆的B叔又不知道如何去表达自己内心的想法,经calmound神的指导,B叔决定写封情书给对方.他从Tamara那里,了解到了那个女孩叫做Lyv,而且爱好英语.B叔不好意思太直接地表达,就在情书的写法上加了一些变化.

         寄过去之后,那个女孩不明白其中的含义,只在信的最后看到了一个提示,你能根据提示告诉那个女孩B叔想说的话吗?帮帮善良的B叔追到女朋友吧~~~

     
         信上提示如下:情书中凡是女孩名字中有的字母(即L,Y,V,不分大小写)全部保留,并保留所有的元音字母(AEIOU,不分大小写)和空格,其余字母均舍去.注意,若处理完之后两个单词之间有多个空格,只保留一个,句首句末都不能是空格。

    Input

     输入一行字符串,仅有大小写字母和空格组成,字符串的长度len(1=<len<=100);

    Output

     输出处理好的字符串

    Sample Input

    hI plSorTver mst YcXosu

    Sample Output

    I love You


    解题思路:这是一道对字符串操作的题目,存在的坑点就是空格的存在,空格可能会开头,结尾,单词单词之间存在多个,这时候需要做好控制


     1 #include <iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 using namespace std;
     5 int main()
     6 {
     7     char s[110],x[110];
     8     int i,j,len,flag=0;
     9     gets(s);
    10     len=strlen(s);
    11     j=0;
    12     memset(x,0,sizeof(x));
    13     for(i=0; i<len; i++)
    14     {
    15         if(s[i]=='A'||s[i]=='a'||s[i]=='e'||s[i]=='E'||s[i]=='I'||s[i]=='i'||s[i]=='o'||s[i]=='O'||s[i]=='U'
    ||s[i]=='u'||s[i]=='L'||s[i]=='l'||s[i]=='Y'||s[i]=='y'||s[i]=='V'||s[i]=='v') 16 { 17 x[j++]=s[i]; 18 flag=1; 19 } 20 if(s[i]==' '&&flag==1)///只保存单词之后出现的第一个空格 21 { 22 flag=0; 23 x[j++]=s[i]; 24 } 25 } 26 while(x[j-1]==' ')///结尾可能会出现多个空格,这里使用循环将其一一去除 27 { 28 j--; 29 } 30 x[j]=''; 31 printf("%s ",x); 32 return 0; 33 }

    但其实我刚开始并不是这样做的,我开始将规定的字母和空格都一起存到了一个新的字符数组之中,但是值得注意的是这个新的字符数组中单词开头,结尾和单词单词之间可不是只有一个空格,当时有点束手无策,加上最近在学习Python,心里发牢骚,要是C语言中也有类似split的函数,能切割字符串就好了,嘻嘻,还真有!!!

     1 #include <iostream>
     2 #include<stdio.h>
     3 #include<string.h>
     4 using namespace std;
     5 int main()
     6 {
     7     char s[110],x[110];
     8     int i,j,len,count=0;
     9     gets(s);
    10     len=strlen(s);
    11     j=0;
    12     memset(x,0,sizeof(x));
    13     for(i=0; i<len; i++)
    14     {
    15         if(s[i]=='A'||s[i]=='a'||s[i]=='e'||s[i]=='E'||s[i]=='I'||s[i]=='i'||s[i]=='o'||s[i]=='O'||s[i]=='U'
    ||s[i]=='u'||s[i]=='L'||s[i]=='l'||s[i]=='Y'||s[i]=='y'||s[i]=='V'||s[i]=='v'||s[i]==' ') 16 { 17 x[j++]=s[i]; 18 } 19 } 20 char *token = strtok(x," "); 21 while( token != NULL ) 22 { 23 if(count==0) 24 { 25 printf("%s", token ); 26 } 27 else 28 { 29 printf(" %s",token); 30 } 31 count++; 32 token = strtok( NULL, " "); 33 } 34 return 0; 35 }
    strtok()函数!!!

     1 #include <stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5   char str[] = "mv a.c b.c";
     6   char *p; 
     7   p = strtok(str, " ");
     8   while(p)
     9   {  
    10     printf("%s
    ", p);  
    11     p = strtok(NULL, " ");  
    12   }
    13   return 0;
    14 }

    在linux2.6.29以后的版本中,strtok被strsep代替了

     1 #include <stdio.h>
     2 #include<string.h>
     3 int main()
     4 {
     5   char str[] = "mv a.c b.c";
     6   char *p;
     7   char *buff;
     8   buff=str;
     9   p = strsep(&buff, " ");
    10   while(p)
    11   {
    12     printf("%s
    ", p);
    13     p = strsep(&buff, " ");
    14   }
    15   return 0;
    16 }
     


  • 相关阅读:
    上拉电阻与下拉电阻的总结
    硬件设计中的30个错误想法与原因分析
    转载:个人电子技术经验积累
    最为精辟和实用的按键处理程序
    TM1637驱动程序
    17.TLB
    14.PTD与的基址
    java读写文件及保留指定位小数
    Java堆内存不足
    Ubuntu下创建程序启动器
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/9042647.html
Copyright © 2011-2022 走看看