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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
Cr
記事: 93
登録日時: 9年前

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

#1

投稿記事 by Cr » 8年前

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;
}
一応置き換えは成功したのですが、半角スペースで区切るとそれぞれが一文として扱われてしまってうまく動きません...
半角スペースをエンターと区別して扱うにはどうすればいいですか?


アバター
Cr
記事: 93
登録日時: 9年前

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

#3

投稿記事 by Cr » 8年前

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;
}
以上のソースで動きました!
どうもありがとうございました

アバター
Cr
記事: 93
登録日時: 9年前

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

#4

投稿記事 by Cr » 8年前

出来てなかった…

コード:

#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をもらえたので完成です。
どうもありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る