A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
★2つ関数を紹介します。
・たくさんのアドバイスと回答があるので VBA の MID と LEFT 関数と同じ機能を紹介します。
●MID関数
char MyStrMid( char buff[], const char string[], int pos, int len )
{
char *dest = buff;
if ( pos < strlen(string) ){
for ( string += pos ; len > 0 ; len-- ){
if ( *string == '\0' ){
break;
}
*dest++ = *string++;
}
}
*dest = '\0';
return( buff );
}
●LEFT関数
char MyStrLeft( char buff[], const char string[], int len )
{
return( MyStrMid(buff,string,1,len) );
}
●書式
・MyStrMid( 抽出文字列領域, 文字列, 抽出開始位置, 抽出バイト数 );
戻り値は『抽出文字列領域』へのポインタを返します。
・MyStrLeft( 抽出文字列領域, 文字列, 抽出バイト数 );
戻り値は『抽出文字列領域』へのポインタを返します。
●使い方
char buff[ 5 + 1 ]; ←抽出用のバッファ領域(サイズは『取り出す文字数+NULL文字分』以上を指定)
char aaa[] = "abcdefghi"; ←C言語には文字列型がないので char 型の配列にする
MyStrMid( buff, aaa, 3, 5 ); ←3文字目~7文字目を抜き出す
printf( "buff=[%s]\n", buff );
最後に:
・上記の2つの関数でエクセル(VBA)の MID と LEFT と同じ処理を行えます。
・注意事項として MyStrMid、MyStrLeft 関数の引数に NULL ポインタを渡したときの対策はしていません。
このため NULL ポインタを渡さないことが絶対条件です。安全性を高めるには引数に NULL ポインタが
渡されたときの処理を追加して下さい。→上手に改良してね。
・VBA の RIGHT関数はご自分で作成してみて下さい。→出題かな。
・以上。もし良かったら上記の関数を使って下さい。
No.5
- 回答日時:
典型的な方法としては、
char aaa[] = "abcdefghi";
char s[3];
strncpy(s, aaa + 3, 5);
または
wchar_t aaa[] = L"abcdefghi";
wchar_t s[3];
wcsncpy(s, aaa + 3, 5);
ですね。
C++なら、std::basic_string<>::substrがそれにあたるかと思います。
No.4
- 回答日時:
Cは文字列を言語仕様として持っておらず、それを一意に扱う関数も少なく、MIDやMID$に相当する関数はありません(作っても多寡がしれているので多用する場合はすぐ作れる)
元の文字列を残したければ、先頭をオフセットしてからstrndupかstrncpy(前もって用意しておく場合)
char *string = "abcdef";
char *output;
/* MID(string,3,2) */
output = strndup(string+2,2);
壊れて良いなら、
string+2;
*(string+2) = NULL;
どちらか使いたいほうでどうぞ
No.3
- 回答日時:
>CHAR型の変数:aaaに"abcdefghi"を格納して
char型の変数には文字列を入れられません。
char *型の変数に文字列へのポインタを入れることになります。
#include <string.h>
char *aaa = "abcdefghi";
char bbb[ 256 ];
strncpy( bbb, aaa + ( 3 - 1 ), 7 - ( 3 - 1 ) );
bbb[ 7 - ( 3 - 1 ) + 1 ] = '\0';
参考URL:http://www005.upp.so-net.ne.jp/h-masuda/cl/CLib/ …
No.2
- 回答日時:
char *aaa = "abcdefghi";
char bbb[5] = {0}; /* 4 文字分+ヌル文字分 */
strncpy(bbb, aaa + 2, 4); /* C言語では0から始まるから */
てな感じ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- C言語・C++・C# 【C言語】全角文字の配列を、全角のまま1文字ずつ出力する方法 4 2023/05/09 15:08
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- Excel(エクセル) エクセルでA列セル内で折り返すことなく、文字列を、B列C列・・・側に一行に 2 2022/07/23 02:02
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- C言語・C++・C# C言語の質問です、プログラミング初心者です このような文字列があった場合 "abcdef☆ghijk 4 2022/11/22 10:56
- Visual Basic(VBA) EXCEL VBAで教えてください。 1 2022/12/22 04:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
char*を初期化したいのですが
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
CStringからchar*への型変換に...
-
new charとnew char[N]の違いは?
-
エクセルのMID関数は、C言語では?
-
wsprintf( ポインタ , "%d" , "...
-
C言語のプログラムについてです
-
DWORDとcharの変換
-
fstream型オブジェクトを関数の...
-
szとlpszの違い
-
C言語 strstrの実装
-
csvファイルを構造体に格納した...
-
C言語の文字リテラル中の16進文...
-
C言語で文字列をかえす正しい書...
-
コマンドライン引数 *argv[]は...
-
文字列のswap
-
strcat関数を自作したいです
-
C++Builder 2009 テキスト...
-
const char* s1とただのchar s1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
char*を初期化したいのですが
-
CStringからchar*への型変換に...
-
C言語のintとcharの違いってな...
-
C言語にて構造体のメンバがNULL...
-
小数点入りの文字列をfloat型に...
-
strcat関数を自作したいです
-
C言語のプログラムについてです
-
const char* s1とただのchar s1...
-
DWORDとcharの変換
-
char型にint型の数値を代入する。
-
文字列の途中から途中までを抽出
-
new charとnew char[N]の違いは?
-
文字列内の数字削除
-
fgetc( )の戻り値はなぜ整数??
-
char 文字列型 の表現範囲が-12...
-
csvファイルをfscanfで読み込む...
-
fstream型オブジェクトを関数の...
-
エクセルのMID関数は、C言語では?
-
ポインタを使って回文かどうか...
-
ポインタ配列
おすすめ情報