c - 用分号分割字符串而不使用 strtok

标签 c string

我为此使用C。我一直在尝试使用分号作为分隔符来分割字符串。使用命令行参数,我将传递一个字符串,例如“1 + 2; 3 + 4”,我想将其输出为 1+2 3+4 我不能为此使用 strtok。

我尝试通过字符串运行 for 循环,但它不起作用。

 for (int i = 0; argv[1][i] != ';';i++)
    {
        char* argv;
        printf("\n%s", *(argv[1][]));
    }

这是编辑过的部分

for (int i = 0; argv[1][i] != ';' || argv[1][i] != '\0'; i++)
    {
        for (int j = 0; argv[1][j]; j++)
        {
            char string = argv[1][i] - argv[1][j];

            printf("\n%s", string);
        }

    }

当我尝试运行时会发生这种情况

./check "1 + 2; 3 + 4"
number of arguments: 2
1 + 2; 3 + 4
(null)

为什么我在这里得到空?

最佳答案

我想你想要这样的东西:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main(int argc, char **argv)
{
        char *str, *start;
        str = malloc( argc > 1 ? strlen(argv[1]) : 50 );
        strcpy( str, argc > 1 ? argv[1] : "1 + 2; 3+4" );
        /* Error checking omitted for brevity */
        do {
                for( start = str; *str && *str != ';'; str++ )
                        ;
                if(*str == ';')
                        *str++ = '\0';
                printf("%s\n", start);
        } while( *str );
}

考虑到您声明的首选避免在 string.h 中声明的标准库中的任何函数,也许您更喜欢:

#include <stdio.h>
#include <stdlib.h>

size_t len( const char *c ) {
        size_t s = 0;
        while( *c++ )
                s+=1;
        return s;
}
int
main(int argc, char **argv)
{
        char *str, *start;
        const char *target = argc > 1 ? argv[1] : "1 + 2; 3 + 4";
        start = str = malloc( len(target) + 1);
        /* Error checking omitted for brevity */
        while( (*str++ = *target++) != '\0')
                ;
        str = start;
        do {
                for( start = str; *str && *str != ';'; str++ )
                        ;
                if(*str == ';')
                        *str++ = '\0';
                printf("token: %s\n", start);
        } while( *str );
        return 0;
}

关于c - 用分号分割字符串而不使用 strtok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086969/

相关文章:

c - 为什么我必须按 CTRL + Z 3 次才能发送 EOF?

c - 无论输入如何,输出相同

c# - Int 数组作为字典中的键 VS 字符串

ios - 大写字符在Iphone中转换为区分大小写

c - 如何将字符串作为输入,然后在新行中打印每个单词

c-time 函数返回奇怪的值

c - 模运算符应用于字符算术时意味着什么?

ios - 在 iOS 4+ 上优化调色板纹理到 RGB565 的转换(使用查找表)

java - Android If 语句失败

java - 用Java制作一个名称生成器,将生成的字符数量限制为12个,但不会截断单词?