- ベストアンサー
C言語の文字列の長さを計算し表示する方法について。
#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や改行・空白についてがイマイチわかりません。 補足で質問もしようと思いますので付き合ってくれる方がいらっしゃいましたら連絡ください。
- leeca0331
- お礼率16% (2/12)
- C・C++・C#
- 回答数3
- ありがとう数0
- みんなの回答 (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が単語数となるはずです。
その他の回答 (2)
- honiyon
- ベストアンサー率37% (331/872)
こんにちは、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単語です。 と結果表示したいのですが。
- yusuke5111
- ベストアンサー率16% (9/55)
多分、scanf()の使用だと思います。 たしか、scanf()は、スペースで区切られたところまでを1文と判断しているはずです。 scanf()の変わりに、gets()を使ってみては堂でしょうか? PS.文字列の長さを調べるには、strlen()を使うと簡単です。
関連するQ&A
- C言語 文字列の操作
文字Cが含まれる個数を求めたいです #include <stdio.h> int str_chnum(const char str[],int c) { int i; int count=0; for(i=0;str[i]!="\0";i++) if (str[i]==c) count++; return(count); } int main(void) { char st[100]; printf("検索文字列を入力してください:"); scanf("%s",st) ; printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c)); return(0); } コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。
- 締切済み
- C・C++・C#
- C言語 文字列操作
トリム関数とリムーブ関数を作成してみました。改良点はありますでしょうか? ~~~~以下ソース~~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> char *Trim(char *str); char *Remove(char *str, char *rmv); void main(void) { char str[10], rmv[10], *p; int c; /* " abcd "をトリムする */ strcpy(str, " abcd "); printf("トリム前 |%s|\n", str); p = Trim(str); printf("トリム後 |%s|\n", str); /* 指定文字列を削除する */ printf("削除する文字列を入力してください :"); scanf("%s", rmv); Remove(str, rmv); printf("削除後 |%s|\n", str); exit(0); } char *Trim(char *str) { char space[] = " "; char null[] = ""; int index = 0; while(1){ if(strcmp(&(str[index]), null) == 0){ index--; if(strncmp(&(str[index]), space, 1) == 0){ strcpy(&(str[index]), &(str[index]) + 1); }else{ break; } }else{ if(strncmp(&(str[index]), space, 1) == 0 && index == 0){ strcpy(&(str[index]), &(str[index]) + 1); }else{ index++; } } } return str; } char *Remove(char *str, char *rmv) { int c, size, i; char *p; c = '\0'; p = strchr(rmv, c); size = p - rmv; for(i = 0; i < size; i++){ c = (int)rmv[i]; p = strchr(str, c); if (p != NULL) { strcpy(&(str[p-str]), p + 1); } else{ printf("""%c""は見つかりませんでした\n", c); } } return str; }
- ベストアンサー
- C・C++・C#
- C言語 ポインタと配列
#include <stdio.h> /* scanf("%c", &search); ではなく scanf(" %c", &search); であることに注意する */ char *str_chr(const char *str, char c) { char *find; find = NULL; do { if(*str == c) { find = (char*)str; break; } } while(*str++); return(find); } int main(void) { char str[100] = {0}; char search; char *find; printf("文字列を入力してください:"); scanf("%s", str); printf("検索する文字を入力してください:"); scanf(" %c", &search); find = str_chr(str, search); if(find == NULL) { puts("検索した文字は見つかりませんでした。"); } else { printf("検索した文字 %c は\"%p\"にあります。\n", *find , find); } return(0); } このコードのfind = (char*)str;の (char*)str;の部分がどうなっているのかわかりません。 あとこのfindというのは&find[0]という解釈でいいでしょうか? 教えてくださいm(_ _ )m
- ベストアンサー
- C・C++・C#
- 文字列
下のプログラムは何をするためのプログラムなのか教えてください。 個人的にはJISコードに関係していると思うのですがさっぱりわかりません。 どなたか詳しい説明お願いします。 #include <stdio.h> #define LEN 255 int main(void) { char str[LEN]; char cipher[LEN]; int ikey; int i,n; printf("文字列を入力せよ : "); scanf("%s", str); printf("鍵を入力 : "); scanf("%d", &ikey); i = 0; while (str[i]!='\0') { n = (str[i]-'A'+ikey)%26; cipher[i] = 'A'+n; ++i; } cipher[i] = '\0'; printf("%s\n", cipher); return 0; }
- ベストアンサー
- C・C++・C#
- C言語文字数4つカウント
こんにちは。大学の課題で「キーボードから入力した文字数に含まれる'h''o''g''e'の4つの文字数をカウントする関数を含むプログラムを完成させよ」という課題がありました。なかなかできず現段階では以下のようになっています。どうすれば問題文のように実行できますか? #include <stdio.h> char str_chnum(const char str[], int ch) { int count = 0; int i; for(i = 0; str[i] != '\0'; i++) { if(str[i] == ch) count++; } return(count); } int main(void) { char str[128]; int ch; printf("文字列を入力してください:"); scanf("%s", str); printf("検索する文字を入力してください:"); scanf(" %c", &ch); printf("%cは%d個ありました。\n", ch, str_chnum(str, ch)); return(0); }
- ベストアンサー
- 情報工学
- 文字列のコピー
C言語で、文字列をコピーする関数で、処理が止まってしまいます。 以下が実行したプログラムです。 #include<stdio.h> #include<string.h> void copy(char *str2 ,char *str3){ strcpy(str2,str3); } void input(char* str){ scanf("%s",str); } int main (void){ char *a; char *b="TEST"; printf("%s\n",b); input(a); copy(b,a); printf("%s",b); return(0);} copy(b,a);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。
- 締切済み
- 情報工学
- C言語の初心者です。教えてください
#include<stdio.h> #define NAME 4 void main() { char str[NAME]; int i; for (i = 0;i < NAME;i++){ scanf("%s", &str[i]); } for(i = 0; i < NAME;i++){ printf("%s\n", str[i]); } } どこか間違っているのですか?それとも何か足りないのでしょうか? お願いします。
- 締切済み
- C・C++・C#
- C言語、スキャン集合について
下記のプログラムはスキャン集合を使って入力された文字列の先頭に 並んでいる数字を読み込んで捨て、その後に続く文字列を読み込んで 表示するものです。 #include <stdio.h> int main(void) { char str[80]; printf("数字に続けて文字列を入力してください\n"); scanf("%*[0-9]%s", str); printf("%s", str); return 0; } 【質問】%*[0-9] を %[^0-9] に置き換えてコンパイルして実行すると、 意味不明の文字列が出力されるのはなぜでしょうか? 置き換えても同じ結果になる気がするのですが…
- ベストアンサー
- C・C++・C#
- C言語 ポインタ エラー
文字列を入力後改行して入力した文字列を出力したいのですが、エラーがでます。 ハンドルされない例外が 0xFEFEFEFE (helloworld.exe) で発生しました: 0xC00001A5: 無効な例外ハンドラー ルーチンが検出されました。 (パラメーター: 0x00000003)。 調べてみましたが、理解できません 何卒よろしくお願いします。 #include <stdio.h> void put_string(const char *str) { while (*str) putchar(*str++); } int main(void) { char str[100]; printf("文字列を入力してください"); scanf_s("%s", str); put_string(str); putchar('\n'); return(0); }
- 締切済み
- C・C++・C#
補足
#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); } ↑上記のような感じでできました。 ありがとうございまず。 みなさまのおかげで理解することが出来ました。 またわからないことがあればお世話になるかもしれませんが、その時はよろしくお願いします。