尝试使用指针在C中使用其他方法“”所有4个字母的单词

我试图做一个方法叫做“审查”,发现 4 个字母的单词在一个字符串中使用 2 种方法我已经做了,新的方法必须无效审查(* 开始),解释我做错了将是伟大的,谢谢!

我试图做一个方法叫做“”,发现 4 个字母的单词在一个字符串中使用 2 种方法我已经做了,新的方法必须无效(* 开始),解释我做错了将是伟大的,谢谢!

void four_stars(char *start){
int count = 0;
int c = 42;
printf("entered\n");
while(count < 4){
    *start = c;
    start++;
    count++;
}
}

char* find_blank(char *start){
char c;
int space = 127;
int null = 0;
while(*start){
    c = *start;
    int asciiVal = c;
    if(asciiVal == 32 || asciiVal == 3){
        return start;
    }
    start++;
}
}

主要的方法,我用来测试它是:

int main(){
char myString3[25] = "Test a duck";
printf("The string before: %s\n", myString3);
censor(myString3);
printf("The new string: %s", myString3);
return 0;
}

我所拥有的是

void censor(char *start){
char* c = start;
while(*start){
    int i = (int)find_blank(start) - (int)start;
    start = start + i + 1;
    c = start;
    if((int)find_blank(start) - (int)c == 4){
        four_stars(start);
    }
    start++;
}
}
0
#include <stdio.h>
void four_stars(char *start){
    int count = 0;
    int c = '*';
    //printf("entered\n");
    while(count < 4){
        *start = c;
        start++;
        count++;
    }
}
char* find_blank(char *start){
    char c;
    while(*start){
        c = *start;
        if(c == ' ' || c == '\t' || c == '\n'){
            return start;
        }
        start++;
    }
    return start;
}
char* find_not_blank(char *start){
    char c;
    while(*start){
        c = *start;
        if(c != ' ' && c != '\t' && c != '\n'){
            return start;
        }
        start++;
    }
    return NULL;
}
void censor(char *start){
    while(start = find_not_blank(start)){
        int len = find_blank(start) - start;
        if(len == 4){
            four_stars(start);
        }
        start += len;
    }
}
int main(){
    char myString3[25] = "Test a duck";
    printf("The string before: %s\n", myString3);
    censor(myString3);
    printf("The new string: %s", myString3);
    return 0;
}
0

有许多方法可以做到这一点。在学习 C 时,挑战之一是熟悉使用指针扫描字符串。随之而来的是学习什么 C 库函数可在需要时帮助扫描。(你总是可以只用指针来做,但是有一些有用的函数可以节省你大量的比较工作)

扫描 4 个字母的单词时要考虑几个复杂的因素。最值得注意的是标点符号为单词结尾。处理多个可能的单词结尾的一种快捷方式是简单地创建一个字符串,该字符串包含可以在单词结尾的字符集合,而不是简单的space。然后可以使用 C 库函数strchr来检查您的结尾字符是否在该集合中。

利用这一点,这里是一个简短的例子,一个方法来扫描一个字符串的 4 个字母的单词,可以帮助你:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void censor (char *s)
{
    if (!s) return;                 /* validate s               */
    char *sp = s;                   /* start pointer            */
    char *ep = s;                   /* end pointer              */
    char *termchr = " ,.\n\t\0";    /* str of word ends         */
    while (*ep)                     /* for each char in string  */
    {
        if (strchr (termchr, *ep))  /* if char in termchr       */
        {                           /* and num chars == 4       */
            if (ep - ((sp > s) ? ++sp : sp) == 4) 
            {
                while (sp < ep)     /* replace with '*'         */
                    *sp++ = '*';
            }
            else
                sp = ep;            /* if not, just advance sp  */
        }
        ep++;
    }
}
int main (int argc, char **argv) {
    if (argc < 2) {
        fprintf (stderr, "\n error: insufficient input. Usage:  %s <string>\n\n", argv[0]);
        return 1;
    }
    char *str = strdup (argv[1]);   /* make a copy to prevent clobbering argv[1]    */
    printf ("  original string: %s\n", str);
    censor (str);
    printf ("  censored string: %s\n", str);
    return 0;
}
output:
$ ./bin/censor "A sting that has duck you dude."
  original string: A sting that has duck you dude.
  censored string: A sting **** has **** you ****.

注意:((sp > s) ? ++sp : sp)是一个简单的测试,它说如果我在开头,则在比较之前不要前进1

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(544)
为什么WindowsXP无法处理更新的SSL证书版本
上一篇
将DateTime转换为StringPHP
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(20条)