1

需要编写一个函数,在字符串中搜索 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);
    }
}
4

2 回答 2

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);
}
于 2013-03-31T04:55:47.007 回答
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你需要考虑一下。可能复习你的学习材料。

于 2013-03-30T10:46:37.227 回答