计算空白-C中的argc/argv
我想计算空白,比如计算空白-C中的argc/argv,c,argv,C,Argv,我想计算空白,比如'(ASCII SP或32)。我必须使用命令行传递参数。例如,我输入Hello World并希望收到空白的数量,在这种情况下,结果应该是2 我已经试过了: Text=你好,世界 #include <stdio.h> #include <string.h> int main(int argc, char* argv[]){ int spaces = 0; char* mystring = argv[1]; int size = s
'
(ASCII SP或32)。我必须使用命令行传递参数。例如,我输入Hello World并希望收到空白的数量,在这种情况下,结果应该是2
我已经试过了:
Text=你好,世界
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[]){
int spaces = 0;
char* mystring = argv[1];
int size = strlen(argv[1]) + strlen(argv[2]);
for(int i = 0; i < size; i++){
if((*(mystring + i)) == ' '){
spaces++;
printf("%d\n", spaces);
}
}
}
#包括
#包括
int main(int argc,char*argv[]){
int空间=0;
char*mystring=argv[1];
int size=strlen(argv[1])+strlen(argv[2]);
对于(int i=0;i
我知道*(argv+1)
是Hello
(或ASCII码)和*(argv+2)
=World
,这就是我的问题所在。如何计算argv[n]
之间的空格?空格的数量可能不同,因此我不想像If(argc>1){spaces++;}
那样编码
有人能帮忙吗
致以最良好的祝愿
Keita以双引号的形式传递字符串,如“Hello World”。以双引号的形式传递字符串,如“Hello World”。如果执行:
$ a.out Hello world # There are 5 spaces between both args here.
shell将通过将输入命令拆分为序列os spaces(一个连续的空格、制表符和/或换行符序列)位置的参数来提取命令的参数,并从imput中删除注释(如上面的注释),因此如果您发出上面的命令,您将得到如下argv
:
int argc = 3;
char *argv[] = { "a.out", "Hello", "world", NULL, };
在使用引号分隔参数的情况下,可以发出
$ a.out "Hello world" # there are also 5 spaces between the words.
在这种情况下,您将得到如下结果:
int argc = 2;
char *argv[] = { "a.out", "Hello world", NULL, };
在这种情况下,您将在参数中加入空格
重要的
您不检查传递给a.out
的参数数量,因此在您发布的情况下,您可以尝试传递指向strlen()
的NULL
指针,这将导致未定义的行为。这是一个错误,为了使程序正常工作,您可以执行以下操作(我已更正了一些其他错误,并在代码中的注释中对其进行了注释):
最后,您有一个
头,它具有类似isspace(c)
的函数,用于检查字符是否是空格(在本例中,它检查空格和制表符)
#include <stdio.h>
#include <ctype.h>
int main(int argc, char* argv[]){
int spaces = 0;
int arg_ix;
for (arg_ix = 1; arg_ix < argc; arg_ix++) {
char* mystring = argv[arg_ix];
for(; *mystring != '\0'; mystring++) {
if(isspace(*mystring)){
spaces++;
}
}
}
printf("%d\n", spaces);
}
#包括
#包括
int main(int argc,char*argv[]){
int空间=0;
int arg_ix;
对于(arg_ix=1;arg_ix
如果执行:
$ a.out Hello world # There are 5 spaces between both args here.
shell将通过将输入命令拆分为序列os spaces(一个连续的空格、制表符和/或换行符序列)位置的参数来提取命令的参数,并从imput中删除注释(如上面的注释),因此如果您发出上面的命令,您将得到如下argv
:
int argc = 3;
char *argv[] = { "a.out", "Hello", "world", NULL, };
在使用引号分隔参数的情况下,可以发出
$ a.out "Hello world" # there are also 5 spaces between the words.
在这种情况下,您将得到如下结果:
int argc = 2;
char *argv[] = { "a.out", "Hello world", NULL, };
在这种情况下,您将在参数中加入空格
重要的
您没有检查传递给a.out
的参数数量,因此在发布的情况下,您可以尝试传递指向strlen()
的NULL
指针,这将导致未定义的行为。这是一个错误,为了使程序正常工作,您可以执行以下操作(我已更正了一些其他错误,并在代码中的注释中对其进行了注释):
最后,您有一个
头,它具有类似isspace(c)
的函数,用于检查字符是否是空格(在本例中,它检查空格和制表符)
#include <stdio.h>
#include <ctype.h>
int main(int argc, char* argv[]){
int spaces = 0;
int arg_ix;
for (arg_ix = 1; arg_ix < argc; arg_ix++) {
char* mystring = argv[arg_ix];
for(; *mystring != '\0'; mystring++) {
if(isspace(*mystring)){
spaces++;
}
}
}
printf("%d\n", spaces);
}
#包括
#包括
int main(int argc,char*argv[]){
int空间=0;
int arg_ix;
对于(arg_ix=1;arg_ix
您将无法执行此操作-参数解析首先由shell处理,它可能会清除任何多余的空格或其他分隔符。请尝试executable.exe“Hello World”
当然可以使用引号,但用户不会在其字符串中添加任何引号,是否还有其他解决方案,或者我是否必须使用scanf/fgets?展示如何执行程序是绝对重要的(您尝试执行的命令行是什么)由于shell使用命令行中的空格分隔参数,因此可能不会占用任何空格。*(mystring+i)
只是mystring[i]
后者是两者中可读性更强的。您将无法执行此操作-参数解析首先由shell处理,它可能会清除任何多余的空格或其他分隔符。请尝试executable.exe“Hello World”
当然可以使用引号,但用户不会在其字符串中添加任何引号,是否还有其他解决方案,或者我是否必须使用scanf/fgets?展示如何执行程序是绝对重要的(您尝试执行的命令行是什么)由于shell使用命令行中的空格分隔参数,因此可能不会占用任何空格。*(mystring+i)
只是mystring[i]
后者是两者中可读性更强的一种。这很有效,谢谢,但我想知道是否还有其他解决方案?因为用户通常不会在字符串中添加任何引号。@keita063,您无法通过shell剥离空格,因为这是一种正常机制,您无法访问已剥离的字符。唯一的解决方案是ion是为了避免引用空格,这是有效的,谢谢,但我想知道是否有