[英]split string by semicolon without strtok
I am using C for this.我为此使用 C。 I have been trying to split the string using semi colon as a delimiter.我一直在尝试使用分号作为分隔符来拆分字符串。 Using command line argument I will pass a string such as, "1 + 2; 3 + 4" I want to get out put as 1 + 2 3 + 4 I cannot use strtok for this.使用命令行参数,我将传递一个字符串,例如“1 + 2; 3 + 4” 我想输出为 1 + 2 3 + 4 我不能为此使用 strtok。
I have tried to run a for loop through the string but it is not working.我试图通过字符串运行 for 循环,但它不起作用。
for (int i = 0; argv[1][i] != ';';i++)
{
char* argv;
printf("\n%s", *(argv[1][]));
}
THIS IS EDITED PART这是已编辑的部分
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);
}
}
WHEN I TRY TO RUN THIS HAPPEN当我尝试运行这件事时
./check "1 + 2; 3 + 4"
number of arguments: 2
1 + 2; 3 + 4
(null)
why i am getting null here?为什么我在这里得到 null?
I think you want something like:我想你想要这样的东西:
#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 );
}
Given your stated preference to avoid any functions from the standard library that are declared in string.h, perhaps you prefer:鉴于您声明的偏好避免使用 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.