用C语言完成这个任务 本题实现,输入一个包含空格的多单词字符串,单词与单词之间用1个或多个空格分隔。请将字符串中用空格分隔的单词排序后在屏幕上输出来。 要求用指针完成函数中各参数的传递与访问,自定义函数头和函数体中不得出现数组下标形式的表示法。 函数接口定义: int split_sort(char *str,char **pStr);函数对字符串中的单词进行分割,并按字典顺序输出排序后的单词,函数返回字符串中单词的数目。str用于接收实参字符串,pStr用于存放分割后的各单词对应字符串的首地址。下面函数的定义部分框架与花括号部分已经给出了,只需给出函数{...}之中的部分。
时间: 2023-06-12 18:03:59 浏览: 74
```
#include<stdio.h>
#include<string.h>
int split_sort(char *str,char **pStr){
int i,j,k,n=0,len=strlen(str);
char *p;
for(i=0;i<len;i++){
if(str[i]!=' '){
j=i;
while(str[i]!=' '&&i<len) i++;
pStr[n]=(char*)malloc(i-j+1);
strncpy(pStr[n],str+j,i-j);
pStr[n][i-j]='\0';
n++;
}
}
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(strcmp(pStr[j],pStr[k])<0) k=j;
}
if(k!=i){
p=pStr[i];
pStr[i]=pStr[k];
pStr[k]=p;
}
}
for(i=0;i<n;i++){
printf("%s ",pStr[i]);
}
return n;
}
```
相关问题
用C语言求一个字符串中有多少个单词,单词之间用空格分隔,但两个单词之间可能有多个空格
可以使用以下代码来实现:
```c
#include <stdio.h>
#include <ctype.h>
int count_words(char *str) {
int count = 0, is_word = 0;
while (*str) {
if (isspace(*str)) {
is_word = 0;
} else if (!is_word) {
is_word = 1;
count++;
}
str++;
}
return count;
}
int main() {
char str[] = " This is a test string. ";
int count = count_words(str);
printf("The number of words in the string is: %d\n", count);
return 0;
}
```
在 `count_words` 函数中,使用一个 `is_word` 变量来记录当前是否在一个单词中。遍历字符串,如果遇到空格,则将 `is_word` 设为 0;如果遇到一个非空格字符并且当前不在一个单词中,则将 `is_word` 设为 1,并将单词计数器加 1。最后返回计数器的值即可。
用C语言从键盘输入一个包含多个单词字符串,将每个单词分离出来并保存,并且单词首字母大写
好的,可以使用C语言中的字符串处理函数来实现。具体步骤如下:
1. 定义一个字符串数组来保存输入的字符串,如:
```c
char input_str[100];
```
2. 使用scanf函数从键盘读取输入的字符串,如:
```c
scanf("%[^\n]", input_str);
```
这里使用了scanf的格式控制符"%[^\n]",表示读取输入直到遇到换行符为止。
3. 定义一个指针变量来指向输入的字符串,如:
```c
char *p = input_str;
```
4. 使用循环逐个遍历字符串中的字符,如果遇到空格或换行符,则将前面的字符作为一个单词保存,并且将单词首字母大写,如:
```c
while (*p != '\0') {
if (*p == ' ' || *p == '\n') { // 遇到空格或换行符
*p = '\0'; // 在该位置插入字符串结束符
printf("%c%s ", toupper(*(p - strlen(p) + 1)), p - strlen(p) + 1);
p++; // 指向下一个单词的开头
}
else {
p++;
}
}
```
这里使用了字符串处理函数strlen和toupper。其中,*(p - strlen(p) + 1)表示当前单词的首字母,toupper函数将其转换为大写字母,然后使用printf函数输出。
完整代码示例:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main() {
char input_str[100];
printf("请输入一个包含多个单词的字符串:");
scanf("%[^\n]", input_str);
char *p = input_str;
while (*p != '\0') {
if (*p == ' ' || *p == '\n') { // 遇到空格或换行符
*p = '\0'; // 在该位置插入字符串结束符
printf("%c%s ", toupper(*(p - strlen(p) + 1)), p - strlen(p) + 1);
p++; // 指向下一个单词的开头
}
else {
p++;
}
}
return 0;
}
```