题目:去除字符串中的空格并分解单词。 要求:在main()中调用下述各函数,完成字符串中去除空格并分解单词的功能。 函数原型如下: 函数一:单词内是否包含数字 int IsNumIn(char word[]) 函数二:单词内是否包含空格 int IsSpcIn(char word[]) 函数三:去掉单词的前后空格,tab键和换行符 Trim(char oldWord[], char newWord[]) 函数四:单词内部有空格,分解成多个单词 Seg(char words[], char wArray[][100] ) 假设单词内部只有一个空格,没有两个连续空格的情况发生。 要求利用gets函数来获得用户输入的字符串,不能用scanf来获得用户输入的字符串 程序运行示例1: ros2e error 程序运行示例2: hello world hello world
时间: 2024-02-28 12:56:17 浏览: 200
以下是代码实现:
```c
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int IsNumIn(char word[]) {
int len = strlen(word);
for(int i=0; i<len; i++) {
if(isdigit(word[i])) {
return 1;
}
}
return 0;
}
int IsSpcIn(char word[]) {
int len = strlen(word);
for(int i=0; i<len; i++) {
if(word[i] == ' ') {
return 1;
}
}
return 0;
}
void Trim(char oldWord[], char newWord[]) {
int len = strlen(oldWord);
int start = 0, end = len-1;
while(isspace(oldWord[start])) {
start++;
}
while(isspace(oldWord[end])) {
end--;
}
int j=0;
for(int i=start; i<=end; i++) {
newWord[j++] = oldWord[i];
}
newWord[j] = '\0';
}
void Seg(char words[], char wArray[][100]) {
int len = strlen(words);
int index = 0;
int start = 0, end = 0;
for(int i=0; i<len; i++) {
if(words[i] == ' ') {
end = i-1;
int j=0;
for(int k=start; k<=end; k++) {
wArray[index][j++] = words[k];
}
wArray[index][j] = '\0';
index++;
start = i+1;
}
}
int j=0;
for(int k=start; k<len; k++) {
wArray[index][j++] = words[k];
}
wArray[index][j] = '\0';
}
int main() {
char str[100];
printf("请输入一个字符串:\n");
gets(str);
char words[10][100];
int wordCount = 0;
int len = strlen(str);
char temp[100];
int j = 0;
for(int i=0; i<len; i++) {
if(str[i] == ' ') {
temp[j] = '\0';
if(IsNumIn(temp)) {
printf("单词内不能包含数字:%s\n", temp);
return 0;
} else if(IsSpcIn(temp)) {
printf("单词内不能包含空格:%s\n", temp);
return 0;
} else {
char newWord[100];
Trim(temp, newWord);
Seg(newWord, words);
wordCount++;
}
j = 0;
} else {
temp[j++] = str[i];
}
}
temp[j] = '\0';
if(IsNumIn(temp)) {
printf("单词内不能包含数字:%s\n", temp);
return 0;
} else if(IsSpcIn(temp)) {
printf("单词内不能包含空格:%s\n", temp);
return 0;
} else {
char newWord[100];
Trim(temp, newWord);
Seg(newWord, words);
wordCount++;
}
printf("分解的单词:\n");
for(int i=0; i<wordCount; i++) {
printf("%s\n", words[i]);
}
return 0;
}
```
在程序运行时,先输入一个字符串,然后按照题目要求进行处理,最后输出分解后的单词。注意,在处理单词时,需要分别调用函数进行数字和空格的判断。
程序运行示例1:
```
请输入一个字符串:
ros2e error
单词内不能包含数字:ros2e
```
程序运行示例2:
```
请输入一个字符串:
hello world
分解的单词:
hello
world
```
阅读全文