Saya mencoba memeriksa apakah string berisi substring dalam C seperti:
char *sent = "this is my sample example";
char *word = "sample";
if (/* sentence contains word */) {
/* .. */
}
Apa itu sesuatu untuk digunakan, bukan string::find
di C ++?
strchr
.Jawaban:
Perhatikan bahwa
strstr
mengembalikan penunjuk ke awal katasent
jika kataword
itu ditemukan.sumber
strstr
mengembalikan pointer; Saya suka menjadi eksplisit ketika saya menguji pointer.false
ini0
strcasestr
melakukan hal yang sama tetapi mengabaikan kasus.strstr
di glibc di sini: github.com/lattera/glibc/blob/master/string/strstr.c . Ini jauh lebih dioptimalkan daripada implementasi naif - dan mungkin lebih cepat daripada fungsi mandiri yang jelas. Kendati demikian, saat ragu, patokan.Gunakan
strstr
untuk ini.http://www.cplusplus.com/reference/clibrary/cstring/strstr/
Jadi, Anda akan menulisnya seperti ..
sumber
Coba gunakan pointer ...
sumber
Anda dapat mencoba yang ini untuk menemukan keberadaan substring dan untuk mengekstrak dan mencetaknya:
sumber
if(strcmp((ret=strstr(mainstring,substring)),substring))
ini salah: hanya cocoksubstring
jika sufiksmainstring
. Sisa fungsi adalah cara berbelit-belit untuk menulisprintf("and the sub string is:::%s\n", substring);
.Kode ini mengimplementasikan logika bagaimana pencarian bekerja (salah satu cara) tanpa menggunakan fungsi yang sudah jadi:
sumber
Dan berikut ini cara melaporkan posisi karakter pertama dari substring yang ditemukan:
Ganti baris ini dalam kode di atas:
dengan:
sumber
Solusi saya yang rendah hati (peka huruf besar kecil):
Hasil
Diuji pada ATmega328P (avr8-gnu-toolchain-3.5.4.1709);)
sumber
Hal yang sama akan tercapai dengan kode sederhana ini: Mengapa menggunakan ini:
Tetapi bagian yang sulit adalah untuk melaporkan di mana posisi dalam string asli substring dimulai ...
sumber
sumber
Saya percaya bahwa saya memiliki jawaban yang paling sederhana. Anda tidak memerlukan pustaka string.h dalam program ini, atau pustaka stdbool.h. Cukup menggunakan pointer dan pointer aritmatika akan membantu Anda menjadi programmer C yang lebih baik.
Cukup kembalikan 0 untuk False (tidak ada substring yang ditemukan), atau 1 untuk Benar (ya, "sub" substring ditemukan dalam keseluruhan string "str"):
sumber
char a[3] = "asd"; char b[2] = "as"; is_substr(a, b);
String input tidak diakhiri dengan NUL, jadi Anda membanjiri array.char a[4] = "asd"; char b[3]= "as"; is_substr(a+4, b);
strnstr()
ada (setidaknya di libbsd)Menggunakan C - Tidak ada fungsi bawaan
string_contains () melakukan semua pengangkatan berat dan mengembalikan 1 indeks berbasis. Sisanya adalah kode pengemudi dan penolong.
Tetapkan penunjuk ke string utama dan penunjuk substring, penambah substring saat mencocokkan, berhenti looping ketika penunjuk substring sama dengan panjang substring.
read_line () - Kode bonus kecil untuk membaca input pengguna tanpa menentukan ukuran input yang harus disediakan pengguna.
sumber
sumber