我在做作业时遇到问题。我需要从文件中读取字符串,并且需要找到以大写字母开头的单词,并且需要将它们写在新的向量中。步骤1已完成,我需要在这些步骤中使用函数,除<stdio.h>
示例:
原始字符串:笔是红色的 新矢量:钢笔,红色
我的代码:
#include <stdio.h>
#define dim 150
void lettura(int vett1[]); // reading function
void capitalLetter(int vett1[], int vett2[], int i);
main()
{
char vett1[dim];
char vett2[dim];
int i;
lettura(vett1);
capitalLetter(vett1, vett2, i);
}
void lettura(int vett1[])
{
FILE *fp;
char nomefile[dim];
printf("--> Inserisci il nome del file: \n\n", &nomefile); // "insert the name of the file"
gets(nomefile);
printf("\n--> Il contenuto del file e' il seguente: \n\n"); // "the content of the file is the following"
fp= fopen("file.txt","r");
while(!feof(fp)) {
fgets(vett1, dim, fp);
printf("%s", vett1);
} // I close the while
fclose(fp);
} // I close the function
void capitalLetter(int vett1[], int vett2[], int i)
{
for(i=0; i<dim; i++){
if((vett1[i]>= 'A') && (vett1[i]<= 'Z'))
vett1=vett2;
}
printf("%s", vett2);
}
答案 0 :(得分:0)
capitalLetter
函数的第一个问题是参数定义不正确。
void capitalLetter(int vett1[], int vett2[], int i);
这是希望您传递两个int
数组,但是您要传递两个char
数组。您希望编译器针对这种类型的差异抛出一些警告。您希望它看起来像这样:
void capitalLetter(char vett1[], char vett2[], int i);
您的循环可能超出了字符串的结尾,因为您不检查字符串的结尾-您检查整个数组的大小。找到这样的NUL字符时,应该停止循环。
for(i=0; vett1[i]!='\0'; i++)
我不知道您打算如何使用此行:
vett1=vett2;
,但这没有任何意义,因为它将用空字符串替换您正在处理的字符串。如果要让vett2包含大写字母,则要将其更改为
vett2[j++]=vett1[i];
您可能会猜到,这还意味着添加了一个新变量j
。它会使用每个大写字母填充数组vett2
并使用j
,以便它从开头开始并随其填充,因为您不能使用i
,因为它将离开差距。
您也没有明显的理由传入变量i
。您可以在函数本身中声明本地副本以及j
。
int i, j = 0;
在循环之外,您需要向vett2
添加一个NUL终止符以使其成为实际的字符串。
vett2[j]='\0';
最终结果看起来像这样:
void capitalLetter(char vett1[], char vett2[]) {
int i, j = 0;
for(i=0; vett1[i]!='\0'; i++) {
if((vett1[i]>= 'A') && (vett1[i]<= 'Z')) {
vett2[j++]=vett1[i];
}
}
vett2[j]='\0';
printf("%s", vett2);
}