簡體   English   中英

我在使用字符串指針時遇到問題

[英]I'm having a problem with using pointers for strings

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
char slova(char a);
int main()
{
    char a[100];
    fgets(a,sizeof(a),stdin);
    char slova(a);
    return 0;
}
char slova(char a)
{
    int i,x=0,y=0,n;
    n=strlen(a);
    for(i=0;i<n;i++);
    {
        if(*(a+i)>='A' && *(a+i)<='Z') x++;
        if(*(a+i)>='a' && *(a+i)<='z') y++;
    }
    if(y>x) return -1;
    if(y<x) return 1;
    if(x==y || (x==0 && y==0)) return 0;
    
}

任務是如果字符串有更多小寫字母,則返回 -1,如果有更多大寫字母,則返回 1,如果有 0 個字母或相等數量的大寫和小寫字母,則返回 0。 我是第一次處理這種類型的任務,我有很多錯誤,不知道如何解決。 以下是錯誤。

11  14  C:\Users\x\Documents\asgsgg.cpp [Error] invalid conversion from 'char*' to 'char' [-fpermissive]
17  12  C:\Users\x\Documents\asgsgg.cpp [Error] invalid conversion from 'char' to 'const char*' [-fpermissive]
20  11  C:\Users\x\Documents\asgsgg.cpp [Error] invalid type argument of unary '*' (have 'int')

最后一個在第 20 行出現 2 次,在第 21 行出現 2 次。

您需要調用slova()函數,而不是僅僅聲明它,並對結果做一些事情,例如打印結果。

參數應該是char *a ,而不是char a ,因此它是指向字符串的指針,而不是單個字符。

您應該使用函數isupper()islower()而不是自己檢查字符范圍。

無需檢查(x==0 && y==0) 如果它們都為0x == y為真。 您還可以在最后使用一系列else if后跟else

你有一個額外的; for(i=0;i<n;i++)行的末尾,所以它后面的代碼塊不在循環中。

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

int slova(char *a);
int main(void)
{
    char a[100];
    fgets(a,sizeof(a),stdin);
    printf("Result: %d\n", slova(a));
    return 0;
}

int slova(char *a)
{
    int i,x=0,y=0,n;
    n=strlen(a);
    for(i=0;i<n;i++)
    {
        if(isupper(*(a+i))) x++;
        if(islower(*(a+i))) y++;
    }
    if(y>x) return -1;
    else if(y<x) return 1;
    else return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM