#include <stdio.h>

main( void )
{

int i;
char str[128];

printf("一行の英文を入力してください → ");
scanf("%s",str);
i = 0;
while (str[i] != '\0'){
i++;
}


printf("あなたの入力した一行の英文は<%s>で、文字数は%dです。\n", str, i);
}

って方法で文字列の長さを計算しひょうじしてるのですが…。
これだと1単語しか数えられません。
どうしたら1行の長さを表示できるのでしょうか?
nullや改行・空白についてがイマイチわかりません。
補足で質問もしようと思いますので付き合ってくれる方がいらっしゃいましたら連絡ください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

単語の数を数える場合、strlen()を使わずに、はじめにやっていたとおり、


while (str[i] != '\0'){
i++;
}
の方法を使って、
flg=j=0;
while (str[i] != '\0'){
if(str[i] != ' '){
if(flg==0){
j++;
}
flg=1;
}else{
flg=0;
}
i++;
}
とすれば、iが文字数、jが単語数となるはずです。

この回答への補足

#include <stdio.h>

main( void )
{

int i, j, t, flg;
char str[128];

printf("一行の英文を入力してください → ");
gets(str);
i = 0;

flg=j=0;
while (str[i] != '\0'){
if(str[i] != ' '){
if(flg==0){
j++;
}
flg=1;
}else{
flg=0;
}
i++;
}


printf("あなたの入力した一行の英文は<%s>で、文字数は%dで単語数は%dです。\n", str, i, j);
}

↑上記のような感じでできました。
ありがとうございまず。
みなさまのおかげで理解することが出来ました。
またわからないことがあればお世話になるかもしれませんが、その時はよろしくお願いします。

補足日時:2002/01/09 06:48
    • good
    • 0

こんにちは、honiyonです。



 strlenという関数があります。
以下使用例です。

printf("あなたの入力した一行の英文は<%s>で、文字数は%dです。\n", str, strlen(str));
}
 詳しくはお使いの言語ソフトのヘルプ等を参照してください。(必ず載ってます)

 参考になれば幸いです(..

この回答への補足

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

main( void )
{


char str[128];

printf("一行の英文を入力してください → ");

gets(str);


printf("あなたの入力した一行の英文は<%s>で、文字数は%dです。\n", str, strlen(str));


で、なんとかできました。

ここから単語の数を数えるのはどうしたらよろしいのでしょう?

一行の英文を入力してください → I am KEN

と入力して。

…3単語です。

と結果表示したいのですが。

補足日時:2002/01/08 23:39
    • good
    • 0

多分、scanf()の使用だと思います。



たしか、scanf()は、スペースで区切られたところまでを1文と判断しているはずです。
scanf()の変わりに、gets()を使ってみては堂でしょうか?



PS.文字列の長さを調べるには、strlen()を使うと簡単です。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q数字の問題で「あるバネに10gのおもりを下げたらバネの長さが24㎝になり、15gのおもりを下げたら2

数字の問題で「あるバネに10gのおもりを下げたらバネの長さが24㎝になり、15gのおもりを下げたら26㎝になった。バネの伸びがおもりの重さに比例するとして、次の問いに答えなさい。 1 ) xgのおもりを下げたときのバネの長さをy㎝として、yをxの式で表しなさい 2 ) 5gのおもりを下げると、バネの長さは何㎝になるか? 3 ) バネの長さが30㎝になるのは、何gのおもりを下げたときか?」わかる方教えて下さい。 見辛くてすいません

Aベストアンサー

こういう問題は、「日本語の文章を、数式に直して考える」訓練だと思ってください。
数式に直して愚直に計算すれば、必ず解けるようになっています。

1)「バネの伸びがおもりの重さに比例する」ということから、
y=ax+b...a,bは定数
と表されます。
x=10のときy=24、またx=15のときy=26より、

24=10a+b ...(1)
26=15a+b ...(2)
(2)-(1)より、
2=5a
よってa=0.4...(3)
(3)を(1)に代入することで
24=10*0.4+b
b=20
よって、y=0.4x+20
と表されます。

Qprintf( "%d", i % 10 );で?

int count;
int i;
scanf( "%d", &count );
for( i = 0 ; i < count ; i++ )
printf( "%d", i % 10 );「iを10で割った余り」だそうです。
i%5とした場合、 
 仮に5と入力すれば、01234と表示すると思いますが、
何でiを5で割れば5進数みたいにコンピュータが認識するのですか?
理論だけ勉強中で、実際試したことがありません? 
よろしくお願いします。

Aベストアンサー

例えば、246を例に考えてみます。

246を5で割ると49で余りが1

これは書き換えると
246 = 49x5 + 1 という事ですね。

次に49について同様に行なうと
49を5で割ると9で余りが4

これは書き換えると
49 = 9x5 + 4という事ですね。

最初の結果とあわせると、
246 = 9(x5x5) + 4(x5) + 1
という事ですね。

同様に9についても計算すると

246 = 1(x5x5x5) + 4(x5x5) + 4(x5) + 1

となります。


5で割った答えと5で割った余りは、5進数で一つ上の桁へ移せる部分とその桁に残る部分を分けている事になります。
10進数でも32を考えた時、30の部分は上の桁に移せる部分で(10で割った答え部分)2はその桁に残る部分(2 = 32 % 10)ですよね。

Q解けなくて困ってます。解き方を教えてください。中3数学の二次方程式の文章問題です。 長さが50cm

解けなくて困ってます。解き方を教えてください。中3数学の二次方程式の文章問題です。

長さが50cmのひもがあります。このひもを使って長方形を作ったところ、面積が150cm²になりました。この長方形の縦の長さと横の長さをそれぞれもとめなさい。
ただし、縦の長さは横の長さより短いものとします。

Aベストアンサー

長方形ということから、縦を仮にa、横をbとすると、
2a+2b=50  から、a+b=25   

縦をx㎝とすると、横は(25-x)㎝  よって
x(25-x)=150   を解く
+x²+25x-150=0   x²-25x+150=0
(x-10)(x-15)=0
 x=10,15   となり、問題文から縦の長さは 10㎝

参考までに。

Qchar *str; と char* str;

char *str; と char* str;
どっちも同じことを意味しているんですか?

Aベストアンサー

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染むのでしょう。ちなみにそういう風な人たちは

char *str1, *str2;

とは、書けない体になっています。

char* str1;
char* str2;


変数の宣言だと、C に慣れていれば、char* str というのはちょっと違和感があるのは
私も分かりますが、関数のプロトタイプ宣言だと、どちらの方がすっきりしますか?

extern char *memcpy(char *, const char *);

extern char* memcpy(char*, const char*);


# まあ、どっちが正しい、っていうんじゃ無いんですよね

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染む...続きを読む

Q円周の長さが21.98cmの半径の長さって何?

円周の長さが21.98cmの半径の長さって何?

Aベストアンサー

円周=直径×3.14=半径×2×3.14 なので
半径=円周÷2÷3.14

問題にあてはめると
 半径=21.98÷2÷3.14=3.5
3.5cmです。

Qtry{}catch(){}とデストラクタの関係を教えてください。

try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか?

【1】
try{
 throw(CError(100, "エラー情報"));
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
}

【2】
try{
 CError err(100, "エラー情報");
 throw(err); // (1)
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
 //まだデストラクタはちゃんと動作するのでしょうか?
 //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか?
}

宜しくお願いします。

Aベストアンサー

【1】【2】どちらの場合も問題がありません。
コンパイラが必要に応じてerrオブジェクトのコピーを作成します。
デストラクタが呼び出されるタイミングはコンパイラに依存するところもあると思いますが、
例えばVC7.1では【2】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) CErrorクラスのテンポラリオブジェクト(以下a)のコピーコンストラクタが呼び出される。
(3) errオブジェクトのデストラクタが呼び出される
(4) catch文まで到達
(5) aオブジェクトのデストラクタが呼び出される。

VC7.1では、【1】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) catch文まで到達
(3) errオブジェクトのデストラクタが呼び出される。

コンパイラがオブジェクトのコピーを省略しているようです。

Q長さ30㎝ろうそくに火をつけたところ、3分後にろうそくの長さが24cmになりました。χ分間にろうそく

長さ30㎝ろうそくに火をつけたところ、3分後にろうそくの長さが24cmになりました。χ分間にろうそくがもえた、長さをycmとする時、xとyの関係を求めよ。また、xの変域も、もとめよ。 を教えて下さい!

Aベストアンサー

3分で6cm短くなったから、1分間で2cm短くなる。
Y=2x

ロウソクの長さは30cmなので30÷2=15
0≦x≦15

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Qスノーボード板長さについて。 165㎝女性です。 スノーボード初心者なのですが、 板の長さは何㎝がベ

スノーボード板長さについて。
165㎝女性です。
スノーボード初心者なのですが、
板の長さは何㎝がベストでしょうか?
レディース用を見てるとだいたい145㎝くらいまでしかないのですが、短すぎますか?
メンズだと可愛いのがなくて迷っています。

Aベストアンサー

スノボの指導員をしています。スノボ歴28年です。
クラブにも入っています。
仲間の女性スノーボーダーは、だいたい165cmぐらいの人で、147cmぐらいを履いています。ただ、その長さだとかなりのレベルの滑りをする人です。初心者でしたら、145cmをお勧めします。

一般には、
身長マイナス10cmなどと言われていますが、
それは、かなり昔の話です。グラトリとか誰もしなかった頃の話。
しかも、初心者ではなくて、もう滑れる人を対象に考えられた、話。

150~155cmなんて、レベルの高い滑りをする男性の長さです。
僕は指導員ですが、メインで使う長さは150cmです。
カービングメインか、回転競技に出る時に155cmを使うかな。

今のスノボは短くても安定していますので、
145cmで十分です。

後、スノボのソールの形状と言うのがいろいろあるんですが、
キャンバータイプがお勧めです。
ロッカーとか、ハイブリッドなどというのもありますが、
極基本的な、キャンバータイプが、1番基礎を練習するのにいいです。

Qprintf("%x", str)

#include <iostream.h>
main(){
char a[] = "02";
char b[] = "20";
printf("%#x %#x", a, b);
}

結果 → 0x64fe01 0x64fdfe

もし結果が 0x30,0x32 0x32,0x30
という感じなら分かるのに
02 がどうして 64fe01 なんですか?

Aベストアンサー

>02 がどうして 64fe01 なんですか?

恐らく、変数a,bのアドレスが表示されていると思います。
%xは与えられた変数の値を16進表示するのでaと書いてprintf渡すと、変数aは配列ですので、aと書けばそのポインタの値(=メモリアドレス)がprintfに渡されることになります。
中身を表示したいのであれば、

printf("%#x %#x", *a, *b);

と書けばうまくいくはずです。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報