皆さん初めまして。
C++を始めたばっかの初心者です。あるくだらない事で今悩んでいます。簡単なようなん
ですけど僕にとってはとっても難しい事なんで、怒んないで下さい。
例えばですよ、ユーザーに何かインプットさせます。まぁ、こんな感じで
what the hell is wrong with you boy? みたいな感じで。英語ですんません。
それをこんな風に変えられることはできますか?
wht te hel is wrg wth yu by?
最初の文字と最後の文字、ほんで単語が長ければ適当に最初の文字と最後の文字以外の
文字を選ぶ。なんかくだらない事ですがこれをどうしてもマスターしたいんです。教え
てください。C++むずすぎます・・・。
> ...ほんで単語が長ければ適当に最初の文字と最後の文字以外の文字を選ぶ。
- 長い単語であるか否かの判別方法
- 適当な文字の選び方
を示してください。
> なんかくだらない事ですがこれをどうしてもマスターしたいんです。
マスターしたいのは何ですか? 文字列から任意の文字を引っこ抜く方法ですか?
> C++むずすぎます・・・。
ではあなたは BASICなら/Javaなら/Cなら 書けますか?
書けるならそれを見せてください。
はじめまして、初めて書き込ませていただくNTAKAというものです。
うーん・・・確かにTOMさんの話だけでは、よくわかりませんね。
「適当に」ではなく具体的にどうしたいかを明確にする必要があると思います。
ただ、strtok という関数があったと思います。これを使えば、
TOMさんがやりたいことがたぶん、楽にできると思います。
私の見当違いだったらあんまり参考にならないかもしれませんが・・・
ではでは。
> ただ、strtok という関数があったと思います。これを使えば、
> TOMさんがやりたいことがたぶん、楽にできると思います。
入力文字列を単語毎に区切るところまではstrtokでやれるでしょう。
この程度の内容は、C++でなくとも、Cの範疇で解決できると思います。
(C++で作らなければならないという条件があるなら別ですが)
私ならまずstrtok()を使い、
what the hell is wrong with you boy?を で分割します。
次に、各単語を吟味します。
吟味とは、一文字ずつ、残すのか、除去するのか、を判別することです。
この判別は、επιστημηさんが示すよう言っている2点を
TOMさんが明確にしないといけませんね。
本件の仕様になるわけで、TOMさん以外、わかりえないことです。
なんか学生さんの課題っぽいですけど
こんな感じでしょうか
皆さんご指摘されてるように
- 長い単語であるか否かの判別方法
- 適当な文字の選び方
- 単語が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;
}
あはっ。
まちがえちゃった。
> } else {
> strcpy(buf, word + 1);
> buf[strlen(buf) - 1] = '\0';
> }
} else {
buf[0] = word[0];
buf[1] = word[strlen(word) - 1];
buf[2] = '\0';
}
かな・・・
皆さんご親切に説明してくれてありがとうございます。strtokについてもうちょい詳し
く調べて見ます。
まゆみさん、親切にCodeまで書いてくれてありがとうございます。参考にします。
...説明しなきゃあかんのは僕らではなくあなたです。
僕の2つの疑問に答えていただけないのかしら?
# すっごく中途半端でフラストレーション溜まりまくり。
ガス抜きがてら、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;
}
basic_string にeraseなんてあったんですね。はじめて知りました。
// ・・・利用方法が思いつかない。replaceでいいか。