| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 170 人关注过本帖
标题:C++ 如何以‘#’为定界符表示字符串结束,及输出替换字符后的字符串
只看楼主 收藏
UJN923600725
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-11-26
结帖率:50%
  已结贴   问题点数:5  回复次数:2   
C++ 如何以‘#’为定界符表示字符串结束,及输出替换字符后的字符串
Sample Input
3
A cat#
a b c#
a   #
Sample Output
A@cat
a@b@c
a@@@

样例如上
我写了如下
#include <string>
#include <iostream>
using namespace std;
int main()
{
    string str1;
    string str2;
    int N;
    cin>>N;
    cin.ignore(80,'\n');
    while(N--)
        {
      getline(cin, str1,'\n');
          for (int i = 0; i < str1.size(); ++i)
               {
                if (str1[i] == ' ')
                  {
                     str2 += "@";
                   }
                else
                  {
                     str2.push_back(str1[i]);
                   }
                 }
          cout << str2 << endl;
     }
            return 0;
}

但是把那个以#为定界符怎么弄啊,不会弄,看书上说可以其他字符作为定界符,但是我换一下编译貌似有错,我才学C++两节课,不太懂,百度找不到,还有就是输出的样例,我是百度看了看push_back的,但是他会在后面依次添加,我不晓得怎么办了,求助~!



2018-03-16 02:36
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:91
专家分:93
注 册:2017-1-21
  得分:5 
你好,我也是新手,我按照你的题目要求写了下
程序代码:
#include <iostream>
#include<vector>
 using namespace std;
 int main()
 {
     vector<string> result;
     int n;
     cin>>n;
     while(n--)
     {
         string s;
         getline(cin,s,'#');//以#为结束符
         for(int j=0;s[j]!='#';j++){
            if(s[j] == ' ') s[j]='@';
         }
         result.push_back(s);
     }
     for(vector<string>::iterator it=result.begin();it!=result.end();it++)
        cout<<*it;
    return 0;
 }

一般来说,如果是要遇到 # 字符就结束读入字符,可以在串读取时,加个判断结束的条件
for(int i=0;s[i]!='\0';i++){
    if(s[i] == ' ') s[i]='@';
     if(s[i] == '#') {s.resize(i);break;}
}

//如果哪里错了,请指出。


[此贴子已经被作者于2018-3-16 12:16编辑过]

2018-03-16 11:22
UJN923600725
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2017-11-26
  得分:0 
楼上的输出不过来
后来写的,隔了好几天忘了发了

#include <string>
#include <iostream>

using namespace std;

int main()
{
    string str1;
    string str2;
    int N;
    cin>>N;
    cin.ignore(80,'\n');
    while(N--)
    {
     getline(cin, str1,'#');
    cin.ignore(80,'\n');
     for (int i = 0; i < str1.size(); ++i) {
        if (str1[i] == ' ') {
            str1[i] = '@';
        }
    }
    cout << str1 << endl;
    }
    return 0;
}
2018-03-24 18:52







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.076665 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved