[英]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)
; 如果它們都為0
則x == 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.