課題
文字列s2の任意の文字と等しい文字列s1の最初の文字位置を返す関数any(s1, s2)を書け。ただし、一致する文字がなければ-1を返す。
回答
/** * @file プログラミング言語C 2-5 * @brief * @author hiroyuki murai * @date 20171118 * note */ #include <stdio.h> int any(char *s1, char *s2); /** * @fn Main * @brief * @param * @return * @detail */ int main(void) { int i; char s1[100], s2[100]; // 動作確認[1] sprintf(s1, "klujkdfsaljweoiudjsaklcaxw"); sprintf(s2, "zw"); i = any(s1, s2); printf("%3d:%s, %s\n", i, s1, s2); // 動作確認[2] sprintf(s1, "klujkdfsaljweoiudjsaklcaxw"); sprintf(s2, "pr"); i = any(s1, s2); printf("%3d:%s, %s\n", i, s1, s2); } /** * @fn any * @param (char) *s2 * @param (char) *s1 * @return (int) s1の発見位置。一致しなければ(-1) * @detail */ int any(char *s1, char *s2) { int i, j, k; for (i = 0; s1[i] != '\0'; i++) { // 検索対象 for (j = 0; s2[j] != '\0'; j++) { // 検索文字 if (s1[i] == s2[j]) { // 一致したら return i + 1; // 検索対象の位置を返す } } } return -1; // 一致なし }
実行結果
12:klujkdfsaljweoiudjsaklcaxw, zw -1:klujkdfsaljweoiudjsaklcaxw, pr
所感
問題の日本語が分かりづらい。毎度の事ながら。