当前位置: 首页 > 知识库问答 >
问题:

遍历char*并将每个字符与另一个字符进行比较

苏乐
2023-03-14

我对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 != '\0'; 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()

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

共有2个答案

桂德义
2023-03-14
  • arg未声明。似乎应该是argc
  • printf(string_arg)很危险,因为stringarg是一个用户输入,它可以包含任意字符串,其中可能包括%
  • strcmp()如果用于比较字符串。您可以简单地使用==来比较字符
  • printf(计数器)也是错误的
  • }主function末尾的缺失

示例修复:

#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 != '\0'; 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);
}

舒赞
2023-03-14
if (strcmp(string_arg, "a") == 0) { 
     counter++;
}

对< code>strcmp的调用不适合您的情况,因为它比较字符串。使用此语句,可以将从< code>string_arg指向的元素开始的字符串与字符串< code >“a”进行比较,而不是与字符常量< code >“a”进行比较。请注意,< code >“a”等于< code >“a” < code >“\ 0”。

相反,您需要将*string_arg'a':

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

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

注意,类似于< code > printf(string _ arg);是危险的。始终使用格式说明符:< code>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 != '\0'; 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;
}
 类似资料:
  • 问题内容: 我是Java的新手,为了实践起见,我试图创建一个十六进制到十进制的数字转换器,因为我已经成功地制作了一个二进制到十进制的转换器。 我遇到的问题基本上是将一个字符串中的给定字符与另一个字符串进行比较。这就是我定义要比较的当前字符的方式: 这是我尝试比较角色的方法: 当我尝试通过仅输入数字(例如12)来运行代码时,它可以工作,但是当我尝试使用“ b”时,会出现一个奇怪的错误。这是运行程序的

  • 问题内容: 我想知道如何逐字地遍历一个字符串。 上面给出了输出: 但是我正在寻找以下输出: 问题答案: 当你做- 您不是在遍历字符串中的单词,而是在遍历字符串中的字符。要遍历单词,您首先需要使用将字符串拆分成单词,然后遍历该单词。范例- 请注意,,且不传递任何参数,所有空格都将其分割(空格,多个空格,制表符,换行符等)。

  • 并且无法编译。 “错误:“operator==”(操作数类型为“\uu gnu\u cxx::\uu alloc\u traits,char

  • 问题内容: 我有一个允许用户上载文本文件或将文件内容复制/粘贴到文本区域的表格。我可以轻松地区分两者,然后将它们输入的任何一个放入字符串变量中,但是我从那里去哪里呢? 我需要遍历字符串的每一行(最好不要担心不同机器上的换行符),确保它只有一个令牌(没有空格,制表符,逗号等),清理数据,然后生成一个SQL查询基于所有方面。 我是一个非常优秀的程序员,所以我知道如何做的一般想法,但是自从使用PHP以来

  • 如何检查一个字符串是否在另一个字符串中,但匹配项需要在前面,而不是中间或最后。例如,a="