- ベストアンサー
<>で囲まれた文字列を取り出す方法
SilverThawの回答
- SilverThaw
- ベストアンサー率32% (260/806)
>2個目以降を同じようにさがすことができません・・・。 のうまくいかないソースを開示してください。
関連するQ&A
- 繰り返し文字検索
strchrを何回か使用して、文字列中の文字を検索したいです。 以下が実行画面 文字列を入力してください。TESTTEEEEEEEEEEEEEEST} 文字を入力してください。T 0 2 0 15 -2686605 以下が実行した関数です。 void sea(const char*str2,int*c){ char *p; while(*p!='\0'){ p=strchr(str2,*c); printf("%d\n",p-str2); str2=p+1; } } char* str2とint *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#
- 文字列
・数字文字列を数値化する関数AtoS()を制作する。 書式:short AtoS(char *pStr, int *pRetCode); 引数:char *pStr; 文字列の先頭アドレス int *pRetCode; 動作の正否を返す 戻り値:pStrを数値化した値 処理: pStrで与えられた文字列をshort型に変換する。 呼び出し側の書式は以下の通りです。 void main(void) { short val; int code; val = AtoS("1234", & code); printf("%d\n",val); val = AtoS("-789", & code); printf("%d\n", val); } です。 自分自身で、正の整数はできました。見てください。そして、負の整数や、「int *pRetCode」の使い方をおしえてください。 #include <stdio.h> short AtoS(cahr *pStr, int *pRetCode); void main(void) { short val; int code; val = AtoS("1234", & code); printf("%d\n", val); val = AtoS("-789", & code); printf("%d\n", val); } short AtoS("char *pStr, int *pRetCode) { short suu; suu = 0; while("\n" != *pStr) { suu = *pStr - '0' + suu * 10; pStr++; } return(suu); } までしかできません。どなたか教えてください。
- ベストアンサー
- C・C++・C#
- 文字列から文字を探す
以下のプログラムです。 #include <stdio.h> main () { char s[]="I love cat and dog."; char c='a'; char *p=s; int n=0; printf("\"%s\"の中から\'%c\'を探します。",s,c); while(*p != '\0') { if(*p == 0) { printf("%d文字目で発見しました。\n",p-s+1); n++; } p++; } if(n == 0) printf("1つも見つかりませんでした。\n"); else printf("全部で%d個見つかりました。\n",n); } C言語の本で勉強しています。 ・p-s+1の意味がわかりません。 ここには何が割り当てられているのでしょうか? ・*pとpの違いもあいまいです。 ・\"%s\"は「"」を印刷するためには必要なのでしょうか? どう質問していいのかもわからないのですが、よろしくお願いします。
- ベストアンサー
- C・C++・C#
- 文字列を大文字にするプログラムがわかりません。
小文字を大文字に、大文字はそのまま、それ以外は表示しないプログラムなんですが、 「それ以外を表示しない」というところが書けません。 #include <stdio.h> int main(void) { char x; char *p; puts("文字列を入力"); scanf("%s", &n); for(p = &n; *p != '\0'; p++){ if(*p >= 'a' && *p <= 'z'){ *p = *p - 'a' + 'A'; } } printf("%s\n", &n); return 0; } これではもちろん数字などはそのまま表示されてしまいます。 しかも、4文字までは普通に大文字で表示されるんですが 6文字だとcoredumpedしてしまいます。 すいませんが、ソース書いて教えていただけると嬉しいです。
- ベストアンサー
- C・C++・C#
- ポインタにによる値の表現と文字列の表現について
◎1------------------------------ #include<stdio.h> int main(void) { char *pt="ABC"; printf("pt=%s\n",pt); char dt[10]="ABCDE"; char *pp; pp=dt; printf("pp=%s\n",pp); return 0; } -------------------------------------- ◎2---------------------------------- #include<stdio.h> int main(void) { char *pt="ABC"; printf("*pt=%s\n",*pt); char dt[10]="ABCDE"; char *pp; pp=dt; printf("*pp=%s\n",*pp); return 0; } ----------------------------------- ◎3--------------------------------------- #include<stdio.h> int main(void) { int ary[5]={111,222,333,444,-1}; int* pt=ary; while(1){ printf("%d ",*pt); ++pt; if(*pt==-1){ break; } } puts(""); return 0; } ----------------------------------------------- 以上3つのプログラムで、◎1はprintfで「*」が付いてなく、正常に実行出来ました。 ◎2はprintfで「*」が付いてなく、エラーは出ませんが、文字列が表示されませんでした。 ◎3は文字列ではなく値ですが、printfで「*」が付いていて正常に実行できます。 これは、値の場合は「*pt」とすることで、ptのアドレスに値を代入しているという事で、「printf("%d ",*pt);」で実行できたということですかね? 文字列の場合は、先頭のアドレスを渡すだけなので、「printf("pt=%s\n",pt);」のようにしてアドレスを参照しないとダメであるということですか? ◎2で「printf("*pt=%s\n",*pt);」としてしまうと、何が起きてしまうのかわかりません。 以上、教えていただけると嬉しいです。
- ベストアンサー
- C・C++・C#
- 文字列 ポインタ
3つの文字ポインタを作成し,最初のポインタが「one」を,二番目のポインタが「two」を,三番目のポインタが「three」をさすように初期化するプログラムを作成しなさい.次にこれらの3つの文字列の順列をすべてプログラムに表示させなさい. という問題で順列をうまく並べる方法がわかりません.手打ちでprintを6個作ることはできますが... うまい方法があるかないか,どのような方法か教えてください.よろしくお願いします. #include<stdio.h> int main(void) { char *a,*b,*c,*t; int i; a="one"; b="two"; c="three"; printf("%s\t%s\t%s\n",a,b,c); return 0; }
- ベストアンサー
- C・C++・C#
- 配列やポインタに文字列を設定することについて
◎1------------------------- #include<stdio.h> int main(void) { char ss[80]; scanf("%s",ss); printf("%s\n",ss); return 0; } ---------------------------- ◎2--------------------------- #include<stdio.h> int main(void) { char *ss="abcde"; printf("%s\n",ss); return 0; } ------------------------- ◎3---------------------- #include<stdio.h> int main(void) { char *ss; ss="abcde"; printf("%s\n",ss); return 0; } ------------------------- 以上3つプログラムで疑問をいだいたのですが、 まず◎1で、これは例えば、 cahr ss[80]="abc"; のように配列ssに文字列"abc"そのものを入れているのか、 char *ss="xyz"; のようにまず"xyz"という文字列をメモリ上のどこかに設定し、その先頭番地をssに代入しているのか、どちらの考えでいいのかわかりません。 次に、◎2、3ではどちらも正常に実行できたのですが、特に◎3で「ss="abcde";」と記述していますが、ssにはアドレスを代入するという認識かあるのですが、文字列定数を代入しても問題ないのか?という疑問があります。 教えていただけたら嬉しいです。
- ベストアンサー
- 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);で処理が止まってしまいます。入力した文字列を表示できるように、御指摘お願いします。
- 締切済み
- 情報工学
お礼
回答ありがとうございました。解決できましたのでソース開示はこの度は送らせて頂きます。次回質問することがあれば失敗する方のソースも開示して聞いた方が良い感じですね。いろいろと参考になります。ありがとうございました。