有关C语言中while的特定语法的问题

时间:2019-05-24 13:42:23

标签: c string pointers

我正在寻找一种使用我的while的特定语法来检查字符串中下一个字符而不增加字符串的方法。

我尝试了一些sudo rabbitmq-plugins enable rabbitmq_management wget 'https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.7.15/bin/rabbitmqadmin' chmod +x rabbitmqadmin sed -i 's|#!/usr/bin/env python|#!/usr/bin/env python3|' rabbitmqadmin mv rabbitmqadmin .local/bin/ rabbitmqadmin -q list queues ,但它会使字符串递增。

++str

仅当下一个字符不是空格时,我才想void test(char *str) { while(*str) { if(*str++ != ' ') ft_putchar(*str); str++; } }

你们有什么主意吗?

3 个答案:

答案 0 :(得分:2)

[编辑] 根据评论中的内容,一旦您将字符串分解为单词,您可能希望查看strstr以查找重复项。 另外,如果要打断单词,您可能需要查看strsep

如果要检查下一个字符,则应该这样做。

void  test(char *str)
{
    while(*str)
    {
        if(*(str + 1) != ' ')
             ft_putchar(*str);
        str++;
    }
}

由于指针算术的工作原理,语法*(str + 1)可以工作,因为str是一个char * *在取消引用之前它将前进到下一个char。正如Nikos C.在评论中观察到的,str[1]也可以使用,它是一种“更简洁”的语法。

这是检查下一个字符的最简单的语法,假定由于while而您的字符串以0终止,则无需检查是否存在另一个字符,因为不会另外输入while。

答案 1 :(得分:1)

  

仅当下一个字符不是空格时,我才想放置字符。

您可以使用

         if(*(str + 1) != ' ')
             ft_putchar(*str);

但这相当于100%,我更清楚了:

         if(str[1] != ' ')
             ft_putchar(*str);

此外,我怀疑您还希望避免输出字符串终止符,因此我可能会以稍微不同的方式构造整个内容:

    if (*str) {
        while (str[1]) {
            if (str[1] != ' ') {
                ft_putchar(*str);
            }
            str++;
        }
        str++;  // because the original loop leaves str pointing to the terminator
    }

答案 2 :(得分:0)

我认为for循环更适合这种情况。此外,该参数还应带有限定符const,因为该字符串在函数中未更改。

该函数的外观如下

void  test( const char *s )
{
    for ( ; *s; ++s )
    {
        if ( *( s + 1 ) != ' ' ) ft_putchar( *s );
    }
}

表达式*( s + 1 )可以代替s[1]

甚至是这样

#include <ctype.h>

//...

void  test( const char *s )
{
    for ( ; *s; ++s )
    {
        if ( !isspace( ( unsigned char )s[1] ) ) ft_putchar( *s );
    }
}

如果您想精确地使用while循环,则只需编写示例

void  test( const char *s )
{
    while ( *s )
    {
        if ( *( s + 1 ) != ' ' ) ft_putchar( *s );
        ++s;
    }
}

void  test( const char *s )
{
    while ( *s )
    {
        if ( !isspace( ( unsigned char )s[1] ) ) ft_putchar( *s );
        ++s;
    }
}

或者您也可以通过以下方式编写函数

void  test( const char *s )
{
    while ( *s )
    {
        if ( *++s != ' ' ) ft_putchar( s[-1] );
    }
}