質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

3回答

3762閲覧

英単語を複数形にする

seriko

総合スコア29

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/01/16 07:16

前提・実現したいこと

C言語です。入力した英単語を複数形に変換するプログラムを作っています。
最初に単語数を入力します。複数形への変換ルールは以下です。

①末尾がs, sh, ch, o, xのいずれかである英単語にesをつける
②末尾がf, feのいずれかである英単語の末尾のf, feを除き、最後にvesを付ける
③末尾の1文字がyで,末尾から2文字目がa, i, u, e, oのいずれでもない英単語の末尾のyを除き,末尾にiesを付ける
④上記に当てはまらない場合は,sをつける.

入力
3
dog
cat
pig

出力
dogs
cats
pigs

#ソースコード

include <stdio.h>
include <string.h>

int main(int argc, const char * argv[]) {
int n,i,a;
char tango[100];
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%s",tango);
a=(int)strlen(tango);

試したこと

配列に文字列を入れて文字数を数えて、最後の文字に追加していく方法を考えましたがどうにもいまくいきませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2020/01/16 07:24

「どうにもいまくいきません」というのは、具体的にはどんな現象なのでしょうか? 質問のコードには文字数を数えるところまでで、末尾の文字を調べる、最後の文字を追加する、という部分が見当たりません。とにかくコードで表してみてください。
nanami12

2020/01/16 08:07

こういった類はperlやruby言語を使ったほうが良いと思います。 もちろんCでもかけますが。 きっと最終的には、何らかのテキストを読み込み一括してスペルチャックの様な事がしたいのであれば 先を見越して、どの言語で効率的に実行ファイルを作成するのがベターか設計したほうが良いと思います。
jimbe

2020/01/16 09:02

大方どこかの課題なのではないでしょうか.
guest

回答3

0

ベストアンサー

理解できるかな?
入力が空だったとき、wordの先頭より前の2文字を調べてしまうので、前に2文字分の余白が必要です。

c

1#include <stdio.h> 2#include <string.h> 3 4int main(int argc, const char * argv[]) { 5 char buf[100] = " "; 6 char * const word = buf + 2; 7 int n; 8 scanf("%d", &n); 9 for (int i = 0; i < n; i++){ 10 if (scanf("%90s", word) != 1) { 11 break; 12 } 13 char *tail = word + strlen(word) - 1; 14 if (strchr("sox", *tail) != NULL 15 || strcmp(tail - 1, "sh") == 0 16 || strcmp(tail - 1, "ch") == 0) { 17 strcpy(tail + 1, "es"); 18 } else if (*tail == 'f') { 19 strcpy(tail, "ves"); 20 } else if (strcmp(tail - 1, "fe") == 0) { 21 strcpy(tail - 1, "ves"); 22 } else if (*tail == 'y' && strchr("aiueo", tail[-1]) == NULL) { 23 strcpy(tail, "ies"); 24 } else { 25 strcpy(tail + 1, "s"); 26 } 27 printf("%s\n", word); 28 } 29}

投稿2020/01/16 09:41

編集2020/01/16 10:06
shiracamus

総合スコア5406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

seriko

2020/01/16 13:24

回答ありがとうございました。参考にさせていただきます。
guest

0

参考情報

  • RailsとPHP各フレームワークの「複数形」変換処理を比較してみる

https://techracho.bpsinc.jp/wingdoor/2019_04_26/73731

投稿2020/01/16 21:53

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずは、文字列を2つとって、文字列の末尾とも一つの文字列が一致するかどうかを判定する関数を書きましょう。

まずはそれからです。

投稿2020/01/16 07:50

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問