c语言 输入一串字符串,用逗号作为标识分割开
时间: 2023-08-15 12:27:26 浏览: 196
好的,您可以使用C语言中的字符串处理函数 strtok() 来实现这个功能。
下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[100]; // 定义一个最大长度为 100 的字符串
printf("请输入一串字符串:");
scanf("%s", str);
char *token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}
```
这段代码中,首先使用 scanf() 函数读入一个字符串,然后使用 strtok() 函数对字符串进行分割。strtok() 函数的第一个参数是要分割的字符串,第二个参数是分隔符。在本例中,我们使用逗号作为分隔符。每次调用 strtok() 函数会返回分割后的字符串,直到返回 NULL 表示分割结束。最后,我们使用 while 循环遍历所有分割后的字符串,并打印出来。
相关问题
分治法实现合并排序算法:输入一串以英文字符逗号隔开的数字,按升序排列。c语言实现
分治法是一种常见的算法设计策略,它将一个大问题分解成若干个小问题,然后递归地解决这些小问题,最后再将结果合并起来得到原问题的解。合并排序就是利用了这个思想,特别是应用于列表或数组的排序。
对于输入一串以英文字符逗号(',') 隔开的数字并按升序排列,我们可以将其理解为一个字符串数组,每个元素由逗号分隔。下面是简单的C语言实现步骤:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 合并两个已排序的子数组
void merge(char* arr[], int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
// 创建临时数组存储左右两个子数组
char temp[n1+n2+1];
for (int i=0; i<n1; i++) {
temp[i] = arr[left+i][0]; // 假设每个数字是一个字符
}
for (int j=0; j<n2; j++) {
temp[i++] = arr[mid+1+j][0];
}
// 合并回原数组
temp[n1+n2] = '\0'; // 添加空字符作为结束标志
int i = 0, k = left;
while (i < n1 && k <= right) {
if (temp[i] <= arr[k][0]) {
arr[k][0] = temp[i];
i++;
} else {
arr[k][0] = arr[mid+1][0]; // 保持中间值不变
k++;
}
}
}
// 分治排序函数
void mergeSort(char* arr[], int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(arr, left, mid); // 对左半部分递归调用
mergeSort(arr, mid+1, right); // 对右半部分递归调用
merge(arr, left, mid, right); // 合并两个有序子数组
}
}
int main() {
char str[] = "5,1,9,3,7,2"; // 输入的字符串,包含逗号
char* arr[100]; // 假设最多有100个元素
// 分割字符串并存入数组
char* token = strtok(str, ",");
int i = 0;
while (token != NULL) {
arr[i++] = strdup(token);
token = strtok(NULL, ",");
}
// 调用合并排序
mergeSort(arr, 0, i - 1);
// 输出排序后的数组
for (int j = 0; j < i; j++) {
printf("%s,", arr[j]);
}
// 清理动态分配的内存
for (int k = 0; k < i; k++) {
free(arr[k]);
}
return 0;
}
```
上述代码首先分割输入字符串,创建一个字符数组。接着,通过`mergeSort`函数对数组进行分治排序,并在主函数中处理输出和内存管理。
阅读全文