C:打印最长公共前缀
C: print the longest common prefix
这里是初学者,正在尝试弄清楚如何在 C 中查找和打印最长的公共前缀。
我这里有这个项目的基地。
#include <stdio.h>
void findprefix(char *str1, char *str2, char *found);
int main(void) {
char str1[100];
char str2[100];
char found[10] = { '[=10=]' };
printf("\nGive string 1: ");
scanf("%99s", str1);
printf("\nGive string 2: ");
scanf("%99s", str2);
//Print prefix
findprefix(str1, str2, found);
printf("%s", found);
return 0;
}
//Function to find the longest common prefix
void findprefix(char *str1, char *str2, char *found) {
int i, j;
for () {
if () {
}
}
}
最初的想法是在函数中使用 for
循环和 if
语句,但我不确定如何使用。
你有一个很好的基础,除了你应该定义 prefix
长度为 100 的病理情况。
在函数中,您应该使用从 0
开始的索引 i
进行迭代,比较来自 str1
和 str2
的字符在偏移量 i
并在它们不同或其中一个为空字节(值为 0 的 char
)时停止,否则将字节复制到 found
数组的相同偏移量 i
.
循环后。您将在 found
中停止迭代的偏移量处存储一个空字节。
最后,你会return给来电者。
这是一个例子:
#include <stdio.h>
//Function to extract the longest common prefix
int findprefix(const char *str1, const char *str2, char *found) {
int i;
for (i = 0; str1[i] == str2[i] && str1[i] != '[=10=]'; i++) {
found[i] = str1[i];
}
found[i] = '[=10=]';
return i;
}
int main(void) {
char str1[100];
char str2[100];
char prefix[100];
printf("\nGive string 1: ");
if (scanf("%99s", str1) != 1)
return 1;
printf("\nGive string 2: ");
if (scanf("%99s", str2) != 1)
return 1;
//Print prefix
findprefix(str1, str2, prefix);
printf("%s\n", prefix);
return 0;
}
这个声明
char found[10] = { '[=10=]' };
多余,没有意义。
此外,函数 findprefix
应该 return 公共前缀的长度。
该函数应按以下方式声明和定义
size_t findprefix( const char *str1, const char *str2 )
{
size_t n = 0;
for ( ; *str1 && *str1 == *str2; ++str1, ++str2 )
{
++n;
}
return n;
}
在主要部分你可以写
size_t n = findprefix( str1, str2 );
if ( n != 0 ) printf( "%.*s\n", ( int )n, str1 );
这是一个演示程序。
#include <stdio.h>
size_t findprefix( const char *str1, const char *str2 )
{
size_t n = 0;
for ( ; *str1 && *str1 == *str2; ++str1, ++str2 )
{
++n;
}
return n;
}
int main( void )
{
const char *str1 = "Hello Word!";
const char *str2 = "Hello Kallum Smith";
size_t n = findprefix( str1, str2 );
if ( n != 0 ) printf( "\"%.*s\"\n", ( int )n, str1 );
return 0;
}
程序输出为
"Hello "
使用函数的 return 值,您还可以动态分配一个数组或声明一个可变长度数组,如果需要,您可以在其中复制前缀。
这里是初学者,正在尝试弄清楚如何在 C 中查找和打印最长的公共前缀。
我这里有这个项目的基地。
#include <stdio.h>
void findprefix(char *str1, char *str2, char *found);
int main(void) {
char str1[100];
char str2[100];
char found[10] = { '[=10=]' };
printf("\nGive string 1: ");
scanf("%99s", str1);
printf("\nGive string 2: ");
scanf("%99s", str2);
//Print prefix
findprefix(str1, str2, found);
printf("%s", found);
return 0;
}
//Function to find the longest common prefix
void findprefix(char *str1, char *str2, char *found) {
int i, j;
for () {
if () {
}
}
}
最初的想法是在函数中使用 for
循环和 if
语句,但我不确定如何使用。
你有一个很好的基础,除了你应该定义 prefix
长度为 100 的病理情况。
在函数中,您应该使用从 0
开始的索引 i
进行迭代,比较来自 str1
和 str2
的字符在偏移量 i
并在它们不同或其中一个为空字节(值为 0 的 char
)时停止,否则将字节复制到 found
数组的相同偏移量 i
.
循环后。您将在 found
中停止迭代的偏移量处存储一个空字节。
最后,你会return给来电者。
这是一个例子:
#include <stdio.h>
//Function to extract the longest common prefix
int findprefix(const char *str1, const char *str2, char *found) {
int i;
for (i = 0; str1[i] == str2[i] && str1[i] != '[=10=]'; i++) {
found[i] = str1[i];
}
found[i] = '[=10=]';
return i;
}
int main(void) {
char str1[100];
char str2[100];
char prefix[100];
printf("\nGive string 1: ");
if (scanf("%99s", str1) != 1)
return 1;
printf("\nGive string 2: ");
if (scanf("%99s", str2) != 1)
return 1;
//Print prefix
findprefix(str1, str2, prefix);
printf("%s\n", prefix);
return 0;
}
这个声明
char found[10] = { '[=10=]' };
多余,没有意义。
此外,函数 findprefix
应该 return 公共前缀的长度。
该函数应按以下方式声明和定义
size_t findprefix( const char *str1, const char *str2 )
{
size_t n = 0;
for ( ; *str1 && *str1 == *str2; ++str1, ++str2 )
{
++n;
}
return n;
}
在主要部分你可以写
size_t n = findprefix( str1, str2 );
if ( n != 0 ) printf( "%.*s\n", ( int )n, str1 );
这是一个演示程序。
#include <stdio.h>
size_t findprefix( const char *str1, const char *str2 )
{
size_t n = 0;
for ( ; *str1 && *str1 == *str2; ++str1, ++str2 )
{
++n;
}
return n;
}
int main( void )
{
const char *str1 = "Hello Word!";
const char *str2 = "Hello Kallum Smith";
size_t n = findprefix( str1, str2 );
if ( n != 0 ) printf( "\"%.*s\"\n", ( int )n, str1 );
return 0;
}
程序输出为
"Hello "
使用函数的 return 值,您还可以动态分配一个数组或声明一个可变长度数组,如果需要,您可以在其中复制前缀。