文字列の検索?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
piyo

文字列の検索?

#1

投稿記事 by piyo » 16年前

お世話になります。
今回、例えば
”/export/home/a/a.txt”
という文字列があった場合、”/export/home/a”までを取得したいのですが、
どうやったらいいのかさっぱりわかりません。。

”./b.txt”の場合は"."が取得したいです。

strtokで”/”を区切りにして・・・・とも思ったのですが、
どうにもスマートになりません。
どなたかいい方法を教えてください。。

GPGA

Re:文字列の検索?

#2

投稿記事 by GPGA » 16年前

これは文字列内の最後の「/」より前の文字列を取得したいということでいいのですかね?
であるならば、以下のプログラムでできます。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
	const char* src = "/export/home/a/a.txt";
	const char* p = strrchr(src, '/');
	if (p != NULL) {
		const int len = p - src + 1;
		char* dst = (char*)malloc(len + 1);
		strncpy(dst, src, len);
		dst[len - 1] = '\0';
		printf("%s\n", dst);
		free(dst);
	}

	return 0;
}
 

nayo

Re:文字列の検索?

#3

投稿記事 by nayo » 16年前

文字列をいったんすべて読んでしまった後、文字列の後ろから「/」を探して、
見つけたら\0に置き換えるとかどうでしょうか

piyo

Re:文字列の検索?

#4

投稿記事 by piyo » 16年前

お返事ありがとうございます!!

思っていたようにできました。

hss12

Re:文字列の検索?

#5

投稿記事 by hss12 » 16年前

書いてたら解決しちゃいましたか。
文字列を読んでいき/の位置をendに記憶させ、最後の/を\0に変えています。
ポインタを使って書いていたんですがどうもうまくいかず配列にしてしまいました。
#include <stdio.h>
int main(void){
    char str[/url] = "/export/home/a/a.txt";
    int start = 0;
    int end = 0 ;

    while(str[start] != '\0'){
        if(str[start] == '/') end = start;
        start++;
    }

    if(end != 0) str[end] = '\0';
    printf("%s\n", str);
    return 0;
}

バグ

Re:文字列の検索?

#6

投稿記事 by バグ » 16年前

ちょっと冗長かな?(^_^;)

#include <stdio.h>
#include <string.h>

int main(void)
{
	char str[/url] = "/export/home/a/a.txt";
	size_t len = 0;

	for (len = strlen(str) - 1; len >= 0; --len)
	{
		if(*(str + len) == '/')
		{
			*(str + len) = '\0';
			break;
		}
	}

	printf("%s\n", str);
	return 0;
}

Blue

Re:文字列の検索?

#7

投稿記事 by Blue » 16年前

素直にstrrchr使えばいいのでは?

GPGA

Re:文字列の検索?

#8

投稿記事 by GPGA » 16年前

すっごいあほなことやってたので、訂正

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
	const char* src = "/export/home/a/a.txt";
	const char* p = strrchr(src, '/');
	if (p != NULL) {
		const int len = p - src;
		char* dst = (char*)malloc(len + 1);
		strncpy(dst, src, len);
		dst[len] = '\0';
		printf("%s\n", dst);
		free(dst);
	}

	return 0;
}

元の文字列を壊していいなら↓

#include <stdio.h>
#include <string.h>

int main(void)
{
	char s[/url] = "/export/home/a/a.txt";
	char* p = strrchr(s, '/');
	if (p != NULL) {
		*p = '\0';
		printf("%s\n", s);
	}

	return 0;
}
 

閉鎖

“C言語何でも質問掲示板” へ戻る