检查给定字符串中是否存在给定子字符串
Check whether a given substring is present in the given string
我应该用 C 编写一个程序来检查给定字符串中是否存在给定子字符串。我写的代码在下面,但它不起作用。谁能告诉我问题出在哪里?
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[30]="the test string";
char sbstr[30]="test";
char strcp[30];
int len = strlen(str);
int i=0;
int p=0;
while(i<len)
{
while (str[i] != '[=10=]' && str[i] != ' ')
{
strcp[i] = str[i];
++i;
}
strcp[i] = '[=10=]';
p = strcmp(sbstr, strcp);
if (p==0)
{
printf("exist");
break;
}
++i;
}
}
对于数组strcp
char strcp[30];
您需要支持单独的索引。
类似
int j = 0;
while (str[i] != '[=11=]' && str[i] != ' ')
{
strcp[j++] = str[i++];
}
strcp[j] = '[=11=]';
注意有标准的 C 函数 strstr
可用于执行任务。
我知道您已经接受了一个答案,但这里有一种稍微更有效的子字符串比较方法,它不涉及在每次迭代中制作候选子字符串的副本。
char str[30]="the test string";
char sbstr[30]="test";
int len = strlen(str);
int sublen = strlen(sbstr);
int found = 0;
int i = 0; // starting index in str to start comparing on
while (!found && sublen <= len) {
found = 1;
// found = !strncmp(str+i, sbstr, sublen);
for (int j = 0; j < sublen; j++) {
if (str[i+j] != sbstr[j]) {
found = 0;
break;
}
}
if (!found) {
i++;
len--;
}
}
if (found) {
printf("Exists starting at index %d\n", i);
}
如果您真的想要硬核,可以使用 Boyer–Moore string-search algorithm 等众所周知的算法,它可以通过使用 table-查找方案 IIRC 来更快地进行搜索。
我应该用 C 编写一个程序来检查给定字符串中是否存在给定子字符串。我写的代码在下面,但它不起作用。谁能告诉我问题出在哪里?
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[30]="the test string";
char sbstr[30]="test";
char strcp[30];
int len = strlen(str);
int i=0;
int p=0;
while(i<len)
{
while (str[i] != '[=10=]' && str[i] != ' ')
{
strcp[i] = str[i];
++i;
}
strcp[i] = '[=10=]';
p = strcmp(sbstr, strcp);
if (p==0)
{
printf("exist");
break;
}
++i;
}
}
对于数组strcp
char strcp[30];
您需要支持单独的索引。
类似
int j = 0;
while (str[i] != '[=11=]' && str[i] != ' ')
{
strcp[j++] = str[i++];
}
strcp[j] = '[=11=]';
注意有标准的 C 函数 strstr
可用于执行任务。
我知道您已经接受了一个答案,但这里有一种稍微更有效的子字符串比较方法,它不涉及在每次迭代中制作候选子字符串的副本。
char str[30]="the test string";
char sbstr[30]="test";
int len = strlen(str);
int sublen = strlen(sbstr);
int found = 0;
int i = 0; // starting index in str to start comparing on
while (!found && sublen <= len) {
found = 1;
// found = !strncmp(str+i, sbstr, sublen);
for (int j = 0; j < sublen; j++) {
if (str[i+j] != sbstr[j]) {
found = 0;
break;
}
}
if (!found) {
i++;
len--;
}
}
if (found) {
printf("Exists starting at index %d\n", i);
}
如果您真的想要硬核,可以使用 Boyer–Moore string-search algorithm 等众所周知的算法,它可以通过使用 table-查找方案 IIRC 来更快地进行搜索。