修正如下代码:#include <stdio.h> #include <string.h> #define MAX_LEN 500 void switch1(char *p) { int x=0; char c[MAX_LEN]; char p1; char *start=NULL; char *end; while(*p!='\0') { if(*p!=' ') { if(start==NULL) { start=p; } end=p; p++; } else { for(p1=start;p1<end;p1++) { c[x]=*p1; x++; } c[x]=' '; x++; p++; } } str(c,p); } int main() { char str[MAX_LEN]; while (fgets(str, MAX_LEN, stdin)) { switch1(str); printf("%s", str); } return 0; }
时间: 2024-02-10 13:13:39 浏览: 50
修正后的代码如下:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 500
void switch1(char *p) {
int x = 0;
char c[MAX_LEN];
char *start = NULL;
char *end = NULL;
while (*p != '\0') {
if (*p != ' ') {
if (start == NULL) {
start = p;
}
end = p;
p++;
} else {
if (start != NULL) {
for (char *p1 = start; p1 <= end; p1++) {
c[x] = *p1;
x++;
}
c[x] = ' ';
x++;
start = NULL;
}
p++;
}
}
if (start != NULL) {
for (char *p1 = start; p1 <= end; p1++) {
c[x] = *p1;
x++;
}
}
c[x] = '\0';
strcpy(p, c);
}
int main() {
char str[MAX_LEN];
while (fgets(str, MAX_LEN, stdin)) {
switch1(str);
printf("%s", str);
}
return 0;
}
```
修改的主要问题:
1. `char p1;` 应修改为 `char *p1;`,因为在后面的循环中需要使用指针类型。
2. 在处理完一个单词后需要将 `start` 置为 `NULL`,否则会导致程序错误。
3. 在处理完所有字符后,需要在新字符串 `c` 中添加字符串结束符 `'\0'`,否则会导致程序错误。
修改后的程序逻辑是:
1. 通过指针 `p` 遍历输入的字符串,当遇到空格时,表示一个单词已经结束,需要将该单词复制到新字符串 `c` 中。
2. 在复制单词时,需要记录单词的起始位置和结束位置,这两个指针分别为 `start` 和 `end`。
3. 复制单词时,需要使用一个循环,将单词中的每个字符逐个复制到新字符串 `c` 中。
4. 复制完一个单词后,需要将 `start` 置为 `NULL`,表示当前没有找到单词。
5. 在处理完所有字符后,需要在新字符串 `c` 中添加字符串结束符 `'\0'`,并将新字符串复制回原字符串 `p` 中。
阅读全文