#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stddef.h> #include <ctype.h> int main() { // please write your code here char buf[1000] = { 0 }; scanf("%[^\n]", buf); char* str = (char*)malloc(strlen(buf) + 1); if (!str) { return -1; } strcpy(str, ""); char* token = strtok(buf, " ,"); while (token) { if (!isupper(token[0])) { token[0] = toupper(token[0]); } strcat(str, token); strcat(str, " "); token = strtok(NULL, " ,"); } //str[strlen(str)] = '\0'; printf("%s", str); free(str); return 0; }修改这段代码,使其能够保留输入字符串中的标点符号
时间: 2024-01-13 20:02:48 浏览: 84
<stdlibh>通用实用工具-达内内部C语言PPT
可以将分隔符从空格和逗号改为只有空格,然后在将单词和标点符号分别处理。修改后的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <ctype.h>
int main() {
char buf[1000] = { 0 };
scanf("%[^\n]", buf);
char* str = (char*)malloc(strlen(buf) + 1);
if (!str) {
return -1;
}
strcpy(str, "");
char* token = strtok(buf, " ");
while (token) {
int len = strlen(token);
if (!isupper(token[0])) {
token[0] = toupper(token[0]);
}
strcat(str, token);
if (len > 1 && ispunct(token[len-1])) {
str[strlen(str)] = token[len-1];
str[strlen(str)] = ' ';
} else {
strcat(str, " ");
}
token = strtok(NULL, " ");
}
printf("%s", str);
free(str);
return 0;
}
```
这样就可以保留输入字符串中的标点符号了。
阅读全文