美文网首页
读入一行数据

读入一行数据

作者: nino天 | 来源:发表于2014-08-12 18:35 被阅读132次

    如果要输入一串数字,以空格为分隔,以换行为结束,然后对数字进行排序等操作。最简单的办法就是用C语言分别存int和char,这个char表示分隔符,分隔符是空格,或者逗号都是可以的。

        int a,i=0,t[100];
        char c='0';
        while(c!='\n')
        {
            scanf("%d",&a);
            t[i++]=a;
            scanf("%c",&c);
        }
        for (int j = 0;j<i;j++)
        printf("%d ",t[j]);
    

    但是注意在这里如果改成cin是无法成功的,因为cin是不识别回车。如果用C++,我们可以考虑string来转换。用getline得到一个字符串,然后把字符串转成int。getline满足输入的规则,以回车结束。

    int t[100];
    string str;
        getline(cin,str);
        cout<<str<<endl;
        int j=0;
        for(int i = 0; i<str.length(); i++)
        {
          if(str[i]!=' ')
          {
              t[j] = (str[i])-'0';
              cout<<t[j++]<<endl;
          }
         }
    

    当然也可以用char a[100];gets(a);来获得一行数据。

    读入一行数据 进阶

    用getline函数,输入一个流对象,一个string对象。从输入流的下一行开始读取,并把结果保存到string对象当中。这时会得到一行数据并换行就输出。但这时并没有输出hello,只有输入文件结束时才跳出循环。

       string line;
       while(getline(cin,line))
           cout<<line<<endl;
        cout<<"hello!"<<endl;
    

    为了让循环能在检测到某些特殊输入时退出,下面的例子给出了当buf中为ENDOFINPUT时就退出

    #include<iostream>
    #include<cctype>
    #include<string>
    #define MAX 1000 + 10
    using namespace std;
    string buf;
    int main()
    {
    
        int i;
        string fs,fe,fend;
        fs = "START";
        fe = "END";
        fend = "ENDOFINPUT";
        while(getline(cin,buf))
        {
            if(buf == fs || buf == fe)
            {
                //getline(cin,buf);
                continue;
            }
            if(buf == fend)
                break;
            for(i = 0; i < buf.length(); i++)
            {
                if(isalpha(buf[i]))
                    buf[i] = (buf[i] - 'A' + 21) % 26 + 'A';
            }
            cout << buf << endl;
            //getline(cin,buf);
        }
        return 0;
    }
    

    输入的格式是
    START
    NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
    END
    START
    N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
    END
    START
    IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
    END
    ENDOFINPUT
    输出的格式是
    IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES
    I WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND IN ROME

    DANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE

        char buf[MAX],fs[15] = "START",fe[15] = "END",fend[15] = "ENDOFINPUT";
    
        int i;
        //while(fgets(buf,sizeof(buf),stdin))
        while(gets(buf))
        {
            if( strcmp(buf,fs) == 0 || strcmp(buf,fe) == 0 )
               continue;
            if(strcmp(buf,fend) == 0)
                break;
            i = 0;
            while(buf[i] != '\0')
            {
                if(isalpha(buf[i]))
                    printf("%c",(buf[i] - 'A' + 21) % 26 + 'A');
                else
                    printf("%c",buf[i]);
                i++;
            }
            printf("\n");
            //printf("%s\n",buf);
        }
    

    相关文章

      网友评论

          本文标题:读入一行数据

          本文链接:https://www.haomeiwen.com/subject/fwyetttx.html