我正在寻找一种使用我的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++;
}
}
。
你们有什么主意吗?
答案 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] );
}
}