如何比较中间(或其他一些但不是开头)的字符串与另一个字符串? 就像我有一个字符串 str1 [] =“我是天才”; 现在,如果我想在其中找到一个单词,我该如何将它与单词进行比较?例如,这个词是am。 这就是我所做的。它有点愚蠢但完美无缺:D
#include<stdio.h>
#include<string.h>
void print( char string[]);
int main()
{
int i;
char string1[20];
printf("Enter a string:");
gets(string1);
print(string1);
return 0;
getch();
}
void print(char string[])
{
int i,word=1,sum=0,x;
for(i=0; ;i++)
{
sum++;
if(string[i]==' ')
{
printf("Word#%d:%d\n",word,sum-1);
sum=0;
word++;
}/* if ends */
if(string[i]=='\0')
{ // program sai kaam karnay k liye ye code yahan bhi paste hona chahyey
printf("Word#%d:%d\n",word,sum-1);
sum=0;
word++;
break;
}
}/* for ends*/
}
答案 0 :(得分:4)
使用strncmp()
:
strncmp( whereToFind + offsetToStartAt, patternToFind, patternLength );
答案 1 :(得分:4)
如果要在字符串中查找子字符串,请使用函数strstr()
:
char *p = strstr(str1, "am");
if (p != NULL)
{
// p now points to start of substring
printf("found substring\n");
}
else
{
printf("substring not found\n");
}
答案 2 :(得分:2)
如果您想将从索引s1
开始的字符串i1
的剩余部分与从s2
开始的字符串i2
的其余部分进行比较,则非常简单:
result = strcmp(s1+i1, s2+i2);
如果您想查看从s1
开始的i1
的子字符串是否与字符串s2
匹配,请尝试:
result = strcmp(s1+i1, s2);
或:
result = strncmp(s1+i1, s2, strlen(s2));
取决于您是希望s1
的整个剩余部分匹配还是只需要与s2
相等的部分匹配(即s1
是否包含s2
作为子串从位置i1
开始。
如果您想搜索寻找子字符串,请使用strstr
。
答案 3 :(得分:1)
由于这是作业,我假设你不能使用标准功能,所以我可以想到两个解决方案:
[]
来
帮助跳过字符串,所以
instr[3]
将是第四个
字符,作为索引
从零开始。那你就看看你是否还在接受你的意思。你可以用(2)进行优化,但我不是想为你做功课。 :)
答案 4 :(得分:-1)
您要使用的一个选项
size_t strspn( char *s1, const char *s2) /* from #include <string.h> */
*returns the length of the longest substring of s1 that begins at the start of s1 and consists only of the characters found in s2.
如果它返回ZERO而不是没有子串。
答案 5 :(得分:-2)
您可以使用将字符串解析为单词并将其存储在新的char数组/指针中。
或者
假设您要查找的字符串“am”存储在ptr * str2中。
可选地
你必须使用二维数组。
char str[3][10] = { "i","am","2-darray"};
这里str [1]将包含“am”。多数民众赞成你想要得到一个字符串的单词。
编辑:删除了从OP转移的点