比较字符串(来自其他索引而不是0)

时间:2010-07-15 10:51:49

标签: c

如何比较中间(或其他一些但不是开头)的字符串与另一个字符串? 就像我有一个字符串 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*/


}

6 个答案:

答案 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)

由于这是作业,我假设你不能使用标准功能,所以我可以想到两个解决方案:

  1. 将所有字词拆分为链接 列表,然后只比较每个字符串 直到找到你的话。
  2. 只需使用for循环,从中开始 开头,你可以使用[]来 帮助跳过字符串,所以 instr[3]将是第四个 字符,作为索引 从零开始。那你就看看你是否还在接受你的意思。
  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中。

  1. 您使用str1中的index []开始比较,直到找到来自str2的索引0的匹配字符
  2. 一旦你找到一个匹配增加两个指针,直到你到达str2的末尾来比较整个字符串。
  3. 如果没有匹配,则继续在str1的str2中从您输入第2步的位置的索引0处找到char。
  4. 可选地

    你必须使用二维数组。

    char str[3][10] = { "i","am","2-darray"};
    

    这里str [1]将包含“am”。多数民众赞成你想要得到一个字符串的单词。

    编辑:删除了从OP转移的点