宿題1:次のプログラムを完成させます。関数max()は、与えられた2つの英語の単語文字列s1とs2から、s1とs2で最も長く同じ英語の単語を見つけます。同じ文字の場合は、異なる文字と単語と見なされますすべて英語の文字で構成されており、単語は1つ以上の空白文字で区切られています。
#include <stdio.h>
#include <string.h>
char s1 [] =”これはACプログラミングテストです”;
char s2 [] =“これはCプログラミングのテストです”;
max(char * s1、char s2 )
{ } main(){ clrscr(); //画面関数をクリアするmax(s1、s2); }
*
これは、前の学期のC言語クラスでlpjが私たちに与えた大きな宿題です。シンプルに見えますが、2次元配列とポインタについてある程度理解しています。以下は私の個人コードです:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include"fun.h"
void main()
{
char s1[] = "Thisssssssss is C programming textxxxxxxxxxxx";
char s2[] = "Thisssssssss is a text for C programming textxxxxxxxxxxx";
max2(s1, s2);
getchar(); getchar();
}
上記が主な機能
#include<stdio.h>
void max2(char *s1, char *s2)
{
int i, b, c = 0, z = 0, j = 0, m = 0, f = 0;
char p[20][30] = {
0 }; //p[m][j]---q[c][f]
char q[20][30] = {
0 };
char answer[99] = {
0 };
for (i = 0; s1[i] != '\0'; i++)
{
if (s1[i] != ' ')
p[m][j++] = s1[i]; //p[0][1]被s1的[i]赋值
else
{
p[m][j] = '\0';
m++;
j = 0; //s1切块
}
}
for (i = 0; s2[i] != '\0'; i++)
{
if (s2[i] != ' ')
q[c][f++] = s2[i]; //q[0][1]被s2的[i]赋值
else
{
q[c][f] = '\0';
c++;
f = 0; //s2切块
}
}
for (i = 0; i < m + 1; i++)
{
for (b = 0; b < c + 1; b++)
{
//if (strstr(q[c], p[i]) != NULL) {
if (strcmp(p[i], q[b]) == 0) //if same
{
//if (strcmp(p[i], answer) > 0)
if (strlen(p[i]) > strlen(answer))
{
//如果大的是p[i] //p[i->m][j]--q[b->c][f]
//for (k = 0; k < i; k++)
strcpy(answer, p[i]);
//answer[k] = p[k]; //如果用strcpy(answer, p[i])会报错;
} //把p[i]拷给answer
}
}
}
printf("the same word:");
puts(answer);
}
上記はヘッダーファイルです
如果运行遇到了
「のstrcpy」:この関数や変数は安全でない可能性があります。代わりにstrcpy_sの使用を検討してください。非推奨を無効にするには、_CRT_SECURE_NO_WARNINGSを使用します。詳細については、オンラインヘルプを参照してください。参照
:
解答 'strcpy':この関数または変数は安全でない可能性があります。
実行結果
役立つ場合は、気に入ってください!