c-遍历char*并将每个char*与另一个char*进行比较



我对c不太熟悉,有问题

  1. 逐个字符遍历char*
  2. 正确比较单个字符与另一个字符

给定一个类似"abcda"的字符串,我想计算"a"的数量并返回计数

#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv){
char* string_arg;
int counter = 0;
if(argc == 2){
for(string_arg = argv[1]; *string_arg != ''; string_arg++){
printf(string_arg);
printf("n");
/*given abcda, this prints
abcda                    a
bcda                     b
cda        but i want    c
da                       d 
a                        a */
if(strcmp(string_arg, "a") == 0){ //syntax + logical error
counter++;
}
}
printf(counter);
}
else{
printf("error");
}
return(0);
}

我也不应该使用strlen((

如何正确地一次比较一个字符?

if (strcmp(string_arg, "a") == 0) { 
counter++;
}

strcmp的调用不适合您的情况,因为它比较字符串。使用此语句,您可以比较从string_arg指向的元素开始的字符串与字符串"a",而不是字符常量'a'。注意,"a"等于'a'+''

相反,您需要将*string_arg'a':进行比较

if (*string_array == 'a') { 
counter++;
}

puts(string_arg);打印字符串。这不是你想要的。您只想打印一个字符。请改用printf("%c", *string_arg);打印字符。

注意,像printf(string_arg);这样的东西是危险的。始终使用格式说明符:printf("%c", *string_arg);。原因在以下链接下解释:

为什么不赞成使用带有单个参数(没有转换说明符(的printf?


这就是你想要的:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main (int argc, char** argv) {
char* string_arg;
int counter = 0;
if (argc == 2){
for (string_arg = argv[1]; *string_arg != ''; string_arg++) {
printf("%c", *string_arg);
printf("n");
if (*string_arg == 'a') { 
counter++;
}
}
printf("%d times character 'a' encountered.", counter);
}
else {
printf("Error: No second argument at the program invocation!");
}
return 0;
}
  • arg未声明。似乎应该是argc
  • printf(string_arg);是危险的,因为string_arg是用户输入,它可以包含任意字符串,其中可能包括%
  • strcmp()如果用于比较字符串。您可以简单地使用==来比较字符
  • printf(counter);也是错误的
  • main函数末尾的}丢失

修复示例:

#include <stdio.h>
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv){
char* string_arg;
int counter = 0;
if(argc == 2){
for(string_arg = argv[1]; *string_arg != ''; string_arg++){
puts(string_arg);
/*given abcda, this prints
abcda                    a
bcda                     b
cda        but i want    c
da                       d 
a                        a */
if(*string_arg == 'a'){
counter++;
}
}
printf("%d", counter);
}
else{
printf("error");
}
return(0);
}

相关内容

最新更新