- ベストアンサー
繰り返し文字検索とは?使い方と実行結果を解説
- 繰り返し文字検索とは、strchrを使用して文字列中の文字を検索する方法です。
- 具体的な実行結果を示します。キーボードから文字列と文字を入力し、一致した位置の一つ後ろを指定します。
- 実際の関数コードも示しており、検索文字が一致した位置の一つ後ろを出力する処理が含まれています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
関連する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言語文字数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); }
- ベストアンサー
- 情報工学
- 文字列の検索
先日同じ質問をして、プログラムの内容を修正したのですが、今度は2つ文字列を入力した後0が無限にでてきます… どなたか解説・指摘・模範解答などおねがいします。 内容は最初にある文字列を入力して、その後別の文字列を入力して、 後に入力した文字列が最初に入力した文字列に含まれていれば1、 含まれていなければ0と表示するプログラムです。 (使用するのは#include<stdio.h>のみ、ポインタ変数必須です) #include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char *c,*d; char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(c!='\0'){ c=a; d=b; while(c!='\0' && d!='\0'){ if(c!=d) printf("0"); break; c++; d++; } } if(d='\0') printf("1"); a++; return a; return NULL; } 例 検索対象文字列:asdfghjkl 検索文字列:sdf 1と出力 検索対象文字列:asdfghjkl 検索文字列:qwer 0と出力
- ベストアンサー
- 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#
- strrchrについて【C言語】
このプログラムのp-strの部分は具体的にはどの様な計算をしているのでしょうか?? (xx-xxというふうに) あとint c は char c としなくても良いのでしょうか?? どなたかご教授よろしくお願いいたします<(_ _)> #include <string.h> #include <stdio.h> int main(void) { char str[]= "abcdefghijklmnabcdefghijklmn", *p; int c; printf("検索文字を入力してください。"); c = getchar(); p = strrchr(str, c); if (p != NULL) { printf("%cは文字列の%d番目にあります。\n", c, p-str); printf("以降の文字列は%sです。\n", p); } else printf("%cは見つかりませんでした\n", c); return 0; } 【実行結果例】 検索文字を入力してください。d dは文字列の17番目にあります。 以降の文字列はdefghijklmnです。
- ベストアンサー
- C・C++・C#
- 文字列の検索
プログラミングの勉強の際に下のプログラムを作りました。 最初にある文字列を入力して、その後別の文字列を入力して、 後に入力した文字列が最初に入力した文字列に含まれていれば1、 含まれていなければ0と表示するプログラムです。 コンパイルは通るのですが、文字列を2つ入力すると 「セグメンテーション違反です」と表記されます… どこが悪いのでしょうか? どなたか解説・指摘・模範解答などおねがいします。 (使用するのは#include<stdio.h>のみ、ポインタ変数必須です) #include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(*c!='\0'){ c=a; d=b; while(*c!='\0' && *d!='\0') if(*c!=*d) printf("0"); break; c++; d++; } if(*d='\0') printf("1"); a++; return a; return NULL; }
- ベストアンサー
- C・C++・C#
- 文字列中に含まれる文字の個数をカウントするプログラムについて…
文字列、1文字が与えられたとき、これをポインタで入力し文字列中に含まれる文字の個数を計算するプログラムを作成せよ。 と、いう課題がだされたんですけど、ユーザが任意の文字列と1文字を入力できるようにすることができません…。 多分main関数の部分をちょっといじくればよいと思うのですが…。 どなたかアドバイスをお願いします。 #include <stdio.h> int count(const char *str, const char ch) { int cnt=0; while (*str!='\0') { if (*str==ch) cnt++; str++; } return cnt; } int main() { const char *str="hello,world!"; const ch='o'; int cnt; cnt=count(str, ch); printf("%s中に%cは%d個です\n", str, ch, cnt); return 0; }
- ベストアンサー
- C・C++・C#
- 文字列のコピー
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++を使って、文字列の中から<>で囲まれた部分を抜き出して表示する、というプログラムを書きたいんですが、どうもうまくいきません。例として、 int main(void) { char html[] = "<abdc><kihddds><mokus>"; char *p; int c; c = '<'; p = strchr(html, c); printf("%cは文字列の%d番目にあります。\n", c, p-html+1); } のような感じで最初の<と最初の>の場所を探すのはできるのですが、2個目以降を同じようにさがすことができません・・・。 上記の例でいうと、実行結果として abdc kihddds mokus とでるようなものをつくりたいのです。 良い方法がありましたら、どうぞご教授おねがいしますm(__)m
- ベストアンサー
- C・C++・C#
- std::stringクラスのc_str()で取得した文字列をいじることは可能ですか?
c++で、以下のようなコードは問題ないでしょうか? // chrの中身の小文字を大文字にする void func(char* chr); std::string str("aaa"); const char* str_p = std.c_str(); func((char*)str_p); ←これは大丈夫ですか? //このあとstrに対して文字列を追加したりいろいろ処理する。 このようにc_strで取得したconst char*をconstをはずして 強引にいじくることは問題ないでしょうか?
- ベストアンサー
- C・C++・C#
お礼
プログラムを載せていただき、ありがとうございます。