助けてください – プログラミング – Home

通知
すべてクリア

助けてください


TOM
 TOM
(@TOM)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

皆さん初めまして。
C++を始めたばっかの初心者です。あるくだらない事で今悩んでいます。簡単なようなん
ですけど僕にとってはとっても難しい事なんで、怒んないで下さい。
例えばですよ、ユーザーに何かインプットさせます。まぁ、こんな感じで
what the hell is wrong with you boy? みたいな感じで。英語ですんません。
それをこんな風に変えられることはできますか?
wht te hel is wrg wth yu by?
最初の文字と最後の文字、ほんで単語が長ければ適当に最初の文字と最後の文字以外の
文字を選ぶ。なんかくだらない事ですがこれをどうしてもマスターしたいんです。教え
てください。C++むずすぎます・・・。


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> ...ほんで単語が長ければ適当に最初の文字と最後の文字以外の文字を選ぶ。

- 長い単語であるか否かの判別方法
- 適当な文字の選び方

を示してください。

> なんかくだらない事ですがこれをどうしてもマスターしたいんです。

マスターしたいのは何ですか? 文字列から任意の文字を引っこ抜く方法ですか?

> C++むずすぎます・・・。

ではあなたは BASICなら/Javaなら/Cなら 書けますか?
書けるならそれを見せてください。


返信引用
NTAKA
 NTAKA
(@NTAKA)
ゲスト
結合: 22年前
投稿: 5
 

はじめまして、初めて書き込ませていただくNTAKAというものです。

うーん・・・確かにTOMさんの話だけでは、よくわかりませんね。
「適当に」ではなく具体的にどうしたいかを明確にする必要があると思います。

ただ、strtok という関数があったと思います。これを使えば、
TOMさんがやりたいことがたぶん、楽にできると思います。

私の見当違いだったらあんまり参考にならないかもしれませんが・・・
ではでは。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> ただ、strtok という関数があったと思います。これを使えば、
> TOMさんがやりたいことがたぶん、楽にできると思います。

入力文字列を単語毎に区切るところまではstrtokでやれるでしょう。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

この程度の内容は、C++でなくとも、Cの範疇で解決できると思います。
(C++で作らなければならないという条件があるなら別ですが)

私ならまずstrtok()を使い、
what the hell is wrong with you boy?を で分割します。
次に、各単語を吟味します。
吟味とは、一文字ずつ、残すのか、除去するのか、を判別することです。
この判別は、επιστημηさんが示すよう言っている2点を
TOMさんが明確にしないといけませんね。
本件の仕様になるわけで、TOMさん以外、わかりえないことです。


返信引用
まゆみ
 まゆみ
(@まゆみ)
ゲスト
結合: 23年前
投稿: 17
 

なんか学生さんの課題っぽいですけど
こんな感じでしょうか
皆さんご指摘されてるように

- 長い単語であるか否かの判別方法
- 適当な文字の選び方
- 単語が2文字だったときの処理

等はご自分で考えてください。

#include <string.h>

char *hoge(const char *word, char *buf);

void main(void)
{
char str[] = what the hell is wrong with you boy?;
char *p = str;
char buf[256];
char result[256];

result[0] = '\0';
p = strtok(str, );
do {
strcat(strcat(result, hoge(p, buf), );
} while ((p = strtok(NULL, )) != NULL);

result[strlen(result) - 1] = '\0';
}

char *hoge(const char *word, char *buf)
{
const int max_word_len = 5;

if (strlen(word) > max_word_len) {
;
} else {
strcpy(buf, word + 1);
buf[strlen(buf) - 1] = '\0';
}

return buf;
}


返信引用
まゆみ
 まゆみ
(@まゆみ)
ゲスト
結合: 23年前
投稿: 17
 

あはっ。
まちがえちゃった。

> } else {
> strcpy(buf, word + 1);
> buf[strlen(buf) - 1] = '\0';
> }

} else {
buf[0] = word[0];
buf[1] = word[strlen(word) - 1];
buf[2] = '\0';
}

かな・・・


返信引用
TOM
 TOM
(@TOM)
ゲスト
結合: 22年前
投稿: 2
Topic starter  

皆さんご親切に説明してくれてありがとうございます。strtokについてもうちょい詳し
く調べて見ます。
まゆみさん、親切にCodeまで書いてくれてありがとうございます。参考にします。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

...説明しなきゃあかんのは僕らではなくあなたです。
僕の2つの疑問に答えていただけないのかしら?

# すっごく中途半端でフラストレーション溜まりまくり。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

ガス抜きがてら、C++で書いたです。
'長さが3文字を越えていたら、真中の文字を抜く'を繰り返しています。

#include <iostream>
#include <sstream>
#include <iterator>
#include <algorithm>

using namespace std;

struct truncate {
string operator()(const string& x) const {
string result = x;
while ( result.size() > 3 ) {
result.erase(result.size()/2,1);
}
return result;
}
};

int main() {
transform(istream_iterator<string>(
istringstream(what the hell is wrong with you boy?)),
istream_iterator<string>(),
ostream_iterator<string>(cout, ),
truncate());
return 0;
}


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

basic_string にeraseなんてあったんですね。はじめて知りました。

// ・・・利用方法が思いつかない。replaceでいいか。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました