在字符串中查找abc ..字母的序列

时间:2013-03-30 10:38:37

标签: c string

需要编写一个函数,在字符串中搜索来自abc的一系列字母..删除它们,只留下序列的第一个和最后两个。 例如,如果输入字符串是: dabcemoqmnopqrrtaduvwxaz 输出应该是: DA-cemoqm-rrtadu-XAZ

这是我写的函数: 但它不起作用......

#include <stdio.h>
#include <string.h>

main()
{
    char str[100];
    printf("please enter a String");
    scanf ("%c", &str);

    for (int i=o; i< strlen(str); i++)
    {
        count=0;
        while(str[i+1]= str[i]+1)
        {
            if (count==0 || str[i+2]!=str[i]+1)
                str[i+1]="-";
            else
                str[i+1]="";
                count++;
        }

        printf("the correct String is:" %c, str);
    }
}

2 个答案:

答案 0 :(得分:2)

测试运行:

Please enter a string: kswa0123456789abcdeffABCDEFQRSTUVWXYZaaaab
Input: kswa0123456789abcdeffABCDEFQRSTUVWXYZaaaab
Output: kswa0-9a-ffA-FQ-Zaaaab

Please enter a string: dabcemoqmnopqrrtaduvwxaz
Input: dabcemoqmnopqrrtaduvwxaz
Output: da-cemoqm-rrtadu-xaz

工作代码:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char str[100];

    //strcpy(str, "dabcemoqmnopqrrtaduvwxaz");
    printf("Please enter a string: ");
    if (scanf("%99s", str) != 1)
        return(1);
    printf("Input: %s\n", str);

    int len = strlen(str);
    char *dst = str;
    int j = 0;

    for (int i = 0; i < len; i++)
    {
        int k;
        for (k = i; k < len; k++)
        {
            //printf("cmp %d (%c) and %d (%c)\n", k, str[k], k+1, str[k+1]);
            if (str[k+1] != str[k]+1)
                break;
        }
        if (k >= i+2)
        {
            //printf("squish %d (%c) to %d (%c)\n", i, str[i], k, str[k]);
            dst[j++] = str[i];
            dst[j++] = '-';
            dst[j++] = str[k];
            i = k;
        }
        else
            dst[j++] = str[i];
    }
    dst[j] = '\0';

    printf("Output: %s\n", str);
    return(0);
}

答案 1 :(得分:1)

简单地说,该功能不能满足您的需求。不管怎样,或者我严重误解了你的意图。

此外,您有许多错误,或至少是可疑的陈述:

scanf ("%c", &str); // This reads a single character, not a string
int i=o             // Did you want a zero here?
str[i+1]="-";       // You probably meant '-', single quotes
str[i+1]= str[i]+1  // Eh? Did you mean `==`? Why?

我真的不明白代码应该如何工作,我不知道如何解决它。但是,我可以指向另一个方向:

如果我理解了要求,则输出字符串可能比输入字符串短。就地工作(在输入之上)只会使事情变得复杂。

尝试重写算法以使用输入字符串和输出字符串。在符合或不符合条件时将字符串中的字符复制到另一个字符串。类似于此的东西:

j = 0;
for (int i = 0; i < strlen(input); i++)
    if (condition(input, i))
        output[j++] = input[i]

“条件”含糊不清,我看不到它在您的代码段中强制执行。您可能希望编写一个辅助函数is_abc,它将告诉您子字符串是否包含在字母表中。

tl;dr你需要考虑一下。可能会审查您的学习材料。