ページ 11

半角スペースを含む文字列の読み込み

Posted: 2011年12月16日(金) 16:24
by Cr
C++での質問です。
入力一行目が英文の行数
以下、英文が行数分(区切りは半角スペース)
という入力が与えられ、Hoshinoという単語に行き当たったらHoshinaに置換して出力しろという問題です。

コード:

#include <iostream>
#include <string>
using namespace std;
int main(){

	int a;
	string str;
	
	cin >> a;
	for(int i=0;i<a;i++){
		cin >> str;
		while(1){
			string::size_type index = str.find("Hoshino");
			if(index == string::npos){
				cout << str;
				break;
			}else{
				int num = (int)index;
				cout << str.substr(0,num);
				cout << "Hoshina";
				str.erase(0,index+7);
				
			}
		}
		cout << endl;
		
	}
	return 0;
}
一応置き換えは成功したのですが、半角スペースで区切るとそれぞれが一文として扱われてしまってうまく動きません...
半角スペースをエンターと区別して扱うにはどうすればいいですか?

Re: 半角スペースを含む文字列の読み込み

Posted: 2011年12月16日(金) 19:47
by beatle
getline関数を使います。
参考:http://www.cppreference.com/wiki/jp/string/getline

Re: 半角スペースを含む文字列の読み込み

Posted: 2011年12月16日(金) 20:03
by Cr
beatleさんありがとうございます

コード:

#include <iostream>
#include <string>
using namespace std;
int main(){

	int a;
	string str;
	
	cin >> a;
	for(int i=0;i<a;i++){
		getline(cin,str);
		while(1){
			string::size_type index = str.find("Hoshino");
			if(index == string::npos){
				cout << str;
				break;
			}else{
				int num = (int)index;
				cout << str.substr(0,num);
				cout << "Hoshina";
				str.erase(0,index+7);
				
			}
		}
		cout << endl;
		
	}
	return 0;
}
以上のソースで動きました!
どうもありがとうございました

Re: 半角スペースを含む文字列の読み込み

Posted: 2011年12月16日(金) 20:14
by Cr
出来てなかった…

コード:

#include <iostream>
#include <string>
using namespace std;
int main(){

	int a;
	string str;
	
	cin >> a;
	getline(cin,str);//上の数値入力時に取り残された改行読み飛ばし用
	for(int i=0;i<a;i++){
		getline(cin,str);
		while(1){
			string::size_type index = str.find("Hoshino");
			if(index == string::npos){
				cout << str;
				break;
			}else{
				int num = (int)index;
				cout << str.substr(0,num);
				cout << "Hoshina";
				str.erase(0,index+7);
				
			}
		}
		cout << endl;
		
	}
	return 0;
}
数値入力されたときに改行が取り残されてるのに気付いてませんでした…
行数を10とか入れてたのでちゃんと10行打ってるか確認してませんでした…
今度こそAcceptedをもらえたので完成です。
どうもありがとうございました