#include <ctype.h> #include <string.h> /********found********/ include <stdio.h> /********found********/ void upfst(char p) { int k = 0; for (; *p; p++) if (k) { if (*p == ' ') k = 0; } else { if (*p != ' ') { k = 1; *p = toupper(*p); } } } void main() { char chrstr[81]; gets(chrstr); upfst(chrstr); printf("\n%s", chrstr); }
时间: 2023-07-19 15:55:47 浏览: 64
这段代码的功能是将输入的字符串中的每个单词的首字母转换成大写字母,并输出转换后的字符串。
具体实现方式是通过指针遍历字符串中的每一个字符,如果当前字符前面是空格且当前字符不是空格,则将其转换成大写字母。最终输出转换后的字符串。
需要注意的是,在第一行中缺少了两个头文件的引用,应该添加 `#include <stdio.h>` 和 `#include <string.h>`。另外,在第 3 行中的参数应该改为 `char *p`,否则会产生编译错误。
相关问题
#include <string.h> #include <stdio.h> #include <ctype.h> void fun(char *p) { int i, t; char c[80]; /********found********/ For (i=0, t=0; p[i]; i++) if (!isspace(*(p+i))) c[t++] = p[i]; /********found********/ c[t] = "\0"; strcpy(p, c); } void main() { char c, s[80]; int i = 0; c = getchar(); while (c != '#') { s[i] = c; i++; c = getchar(); } s[i] = '\0'; fun(s); puts(s); }
这段代码的功能是将输入的字符串中的空格删除,并输出删除后的字符串。但是代码有两处错误:
1. 第一个错误是在第 10 行,`For` 应该改为小写字母 `for`。
2. 第二个错误是在第 13 行,字符串结束符应为 `'\0'` 而不是 `"\0"`。
正确的代码应该是:
```c
#include <string.h>
#include <stdio.h>
#include <ctype.h>
void fun(char *p) {
int i, t;
char c[80];
for (i = 0, t = 0; p[i]; i++) {
if (!isspace(*(p+i))) {
c[t++] = p[i];
}
}
c[t] = '\0';
strcpy(p, c);
}
int main() {
char c, s[80];
int i = 0;
c = getchar();
while (c != '#') {
s[i] = c;
i++;
c = getchar();
}
s[i] = '\0';
fun(s);
puts(s);
return 0;
}
```
#include <stdio.h> #include <string.h> #include <stdlib.h> int main(){ char a[20][20]; int i,j; FILE* fp=fopen("D:\\NewFound\\wenjian a.txt","r+"); //判断 if(fp==NULL){ printf("没有该文件!"); return 0; } for(i=0;i<=19;i++){ fscanf(fp,"%s",a[i]); for(j=0;j<=19;j++){ if((a[i][j]>=65&&a[i][j]<=90)||(a[i][j]>=97&&a[i][j]<=122)){ printf("%c",a[i][j]); } else{ break; } } printf("\n"); if(((a[i]>=65)+(a[i]<=90)<2)+((a[i]>=97)+(a[i]<=122)<2)==0){ continue; } } }为什么这段代码执行后相比文本文件会有多余的字母
根据您提供的代码,问题可能出在文件读取的部分。在代码中,您使用了fscanf函数来读取文件中的每个单词,然后进行处理并打印出其中的字母。
然而,fscanf函数默认以空格作为分隔符来读取文件中的内容。如果文件中存在多余的空格、换行符或其他非字母字符,那么这些字符也会被读取并输出。
为了解决这个问题,您可以使用fgets函数来逐行读取文件内容,然后使用字符串处理函数(如strtok)将每行分割为单词。这样可以更精确地控制读取的内容,避免读取到多余的字符。
另外,您在判断是否为字母时使用了ASCII码范围,但这并不准确。建议使用ctype.h头文件中提供的isalpha函数来进行判断,它能更可靠地判断字符是否为字母。
下面是修改后的代码示例:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main() {
char a[20][20];
int i, j;
FILE* fp = fopen("D:\\NewFound\\wenjian a.txt", "r+");
// 判断
if (fp == NULL) {
printf("没有该文件!");
return 0;
}
for (i = 0; i <= 19; i++) {
fgets(a[i], sizeof(a[i]), fp);
char* word = strtok(a[i], " \n");
while (word != NULL) {
for (j = 0; j < strlen(word); j++) {
if (isalpha(word[j])) {
printf("%c", word[j]);
}
}
printf("\n");
word = strtok(NULL, " \n");
}
}
fclose(fp);
return 0;
}
```
这样修改后,每行将被逐个单词地读取,然后进行处理和打印。同时,使用isalpha函数来判断字符是否为字母,确保只输出字母字符。
请您尝试使用修改后的代码,看看是否能够避免多余的字母输出。