• ベストアンサー

C言語での文字列取得についてです。

 いつもお世話になっております。  例えば、"AAA=C:\aabbcc\ddd"のような文字列があります。C言語だと、この文字列の"C:\aabbcc\"部分だけ抜き出す方法がわかりません。  すいませんが、教えてください。  

  • keyed
  • お礼率73% (17/23)

質問者が選んだベストアンサー

  • ベストアンサー
  • nubou
  • ベストアンサー率22% (116/506)
回答No.2

今時string型を使わないでプログラムを組むのは時間の無駄です これは最近のほとんどのC/C++コンパイラで使えます char s[256]に問題の文字列が入っているとします #include <string> #include <iostream> using namespace std; void main(void) { char s[256]; string str; strcpy(s,"AAA=C:\\aabbcc\\ddd");cout<<s<<endl<<endl; str=s; cout<<"前の削除"<<endl; str.erase(0,str.find('=')+1); cout<<str<<endl; cout<<"後の削除"<<endl; str.erase(str.find_last_of('\\')+1); cout<<str<<endl; } 結果: AAA=C:\aabbcc\ddd 前の削除 C:\aabbcc\ddd 後の削除 C:\aabbcc\ なおリンクの無償ボーランドC++5.5でやりました

参考URL:
http://www.borland.co.jp/cppbuilder/freecompiler/
keyed
質問者

お礼

 ご回答ありがとうございました。 頂戴したサンプルでやりたい処理ができました。

その他の回答 (2)

  • A__
  • ベストアンサー率47% (22/46)
回答No.3

char str[] = "AAA=C:\\aabbcc\\ddd"; for(int i = 0; i < lstrlen(str); i++){  if(*(str+i)=='='){   MessageBox(NULL, str+i+1, "", MB_OK); //C:\\aabbcc\\ddd   break;  } }

keyed
質問者

お礼

 ご回答ありがとうございます。 やり方が理解できました。

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

問題の処理だと 「左から'='文字を探す(strchr()でできる)」 「右から'\'文字を探す(strrchr()でできる)」 「その二つの間の文字列を抜き出す(strncpy()でできる)」 で可能ですが、 一般的にどういう規則で文字列をとりだすのかがわからないので、 これ以上は言えません。 複雑な規則なら「正規表現ライブラリ」というのを使う手もあるのですが…。 いずれにせよ、「どういう規則を使い、どういうデータを得たいか」 によって大きく異なります。

keyed
質問者

お礼

ご回答ありがとうございます。 やりたい処理ができました。

関連するQ&A

  • C言語で文字列操作のアルゴリズム

    C++言語で char s[] = "AAABBBCCCDDDEEE"; という文字列があり、 3バイト毎、取り出して前に*をつけ *AAA s=[BBBCCCDDDEEE] *BBB s=[CCCDDDEEE] *CCC s=[DDDEEE] *DDD s=[DDD] *EEE s=[] のように表示させるプログラムで、 最後だけは3文字とは限らない場合も考慮した 最終的にsが空になるアルゴリズムを考えていますが 何か良い方法はありますか? 例)最後が3文字でない場合 *EE s=[] 2文字でした。

  • C言語で取得した文字列を、C++の文字列として取り扱いたいです。

    C言語で取得した文字列を、C++の文字列として取り扱いたいです。 皆さんこんにちは。 C言語で取得したchar型で定義された文字列を、 C++の「std::string」に渡したいと思っております。 どうすればかなうでしょうか? 具体的には次のような内容です。 ■C言語側 ---- char key1 = "deperture"; ---- ■C++側で「key1 = key2」としたいです。 ---- std::string key2 = key1; ---- C言語側で記述されている「key1」の値(deperture)を、 C++ソース内の「key2」に渡したいと思っています。 こうゆう場合、どんな方法をとれば適切でしょうか。 C言語側でのchar型の文字列の値を、 C++側の「std::string」型として C++のソースへ渡す方法が分からないです。 アドバイスいただけるとありがたいです。 簡単な例を頂けると更に大変ありがたいです。 以上どうぞ宜しくお願い致します。

  • CSV 指定列 文字列 C言語

    失礼します、C言語である文字列が入っている行だけを読み込みたいのですが、どのような考え方で可能でしょうか? 例 XXX,YYYY,OOOO TTT,LLLL,KKKK,GGGG,DDD MMM,WWWW,AAAA 例えば1行づつ読み込んだ時にLLLLが入っていれば その行のKKKK~DDD 改行が入るまで読み込みたいです。 よろしくお願い致します。

  • c言語の文字、また文字列について

    c言語の文字、つまり「'(シングルクオーテーション)」で囲んだ単数の半角文字は、メモリに保存されているのでしょうか。 また、アドレスは有るのでしょうか。 c言語の文字列、つまり「"(ダブルクオーテーション)」で囲んだ複数の文字は、メモリに保存されているのでしょうか。 また、アドレスは有るのでしょうか。

  • C言語での文字列より値を抜き出す

    C言語初心者です。 たとえば、”ABCDE”という文字列があります。 その文字列の2桁目から3文字を取得したい場合、 どのようにすればよろしいでしょうか。  上記の場合、”BCD”が欲しい SQLだと、SUBSTR(B)関数がありますが、C言語には 同様な関数があるのでしょうか。 また、C++ではどうでしょうか。 お客さんに突然聞かれたので、本屋に行く余裕もありませんでした。 どなかた教えてください。お願いします。

  • sedで文字列の抜き出し

    ある一部分の文字列を抜き出したく、sedを使用したいと思って試行錯誤しております。 ↓あるファイル内の文字列 aaa bbb=ccc:ddd=eee:fff=ggg: aaa bbb=hhh:ddd=iii:fff=jjj: ※aaaとbbbの間はスペースです。 ※bbb,ddd,fffはある一定のキーワードです。 ※ccc,eee,ggg,hhh,iii,jjjはバラバラの文字列で長さも一定ではありません。 【質問】 上記の文字列の中でddd=の後の文字列(eee,iii)のみを抜き出したいです。 以下のようなsedを試してみましたが、 eee:fff=ggg iii:fff=jjj が抜き出されてしまいます。 sed 's/.*:ddd=\(.*\):\(.*\)$/\1/' 恐れ入りますが、皆様の知恵をお貸し下さい。

  • Objective-C文字列からC言語文字列に変換したいのですが、どう

    Objective-C文字列からC言語文字列に変換したいのですが、どうすればよいでしょうか? C言語からObjective-cなら NSString *cToOc = [[NSString alloc] initWithCString:"結果" encoding:NSUTF8StringEncoding]; NSLog(@"%@", cToOc); でよいのですが、その逆が知りたいです。 あとこの cToOcは以下のように解放しないといけないのでしょうか? [cToOc release];

  • 1セルの文字列を複数のセルに移す方法

    セルの文字列が空白あるいは特定の文字で区切られている場合にその区切られた単位で別のセルに移す方法を、教えてください。 例。 ”aaa mmmm ddd” が1セルに入っていた場合、それらを隣の3列のセルに|aaa| mmmm| ddd |として分割して入力する方法です。 よろしくお願いします。 

  • 【C言語】大文字小文字に関わらず文字列を検索したい

    C言語で文字列を検索処理があるものですが、 以下のようなことがうまくできず困っています。 1.検索対象はファイルから読み込んだメモリ内の文字列。 2.対象の文字列は大文字小文字に関わらずに抽出する。 例えば、「abc」を検索するとして、文字列内が aaaaBccccdefgだとすると… aaa「aBc」cccdefg かっこ内を検索します。 strstrだと、完全な一致しかヒットしないので… 長い文字列が対象になることもあるので、 すべての組み合わせを見るのも性能的に難しいです。 何か方法ご存知の方いらっしゃいましたら、よろしくお願いします。

  • C言語で文字列操作を忘れてしまいました。

    長い間スクリプト言語ばかりやっておりまして、C言語に戻ると、文字列を返す 関数を作ろうとしましたが、お恥ずかしいながらできませんでした。 ローカル変数の値を戻り値に使おうとして、それがwarningになったり、動作が不安定になったりして、文字列を返す仕組みを完全に忘れてしまっていました。 例えば、"test"と言う文字列を返す関数を書きたいのですが、メモリ操作も考えた サンプルをだれか教えて欲しいです。 int main(void) { printf("%s", 「関数名」); }

専門家に質問してみよう