运用指针比较字符串大小
时间: 2024-01-20 18:14:48 浏览: 30
以下是运用指针比较字符串大小的C++代码示例:
```c++
#include <iostream>
using namespace std;
int compare(char *S, char *T) {
while (*S != '\0' && *T != '\0') { // 当两个指针都没有指向字符串结尾时
if (*S > *T) {
return 1;
} else if (*S < *T) {
return -1;
}
S++; // 指针后移
T++;
}
if (*S == '\0' && *T == '\0') { // 如果两个指针都指向字符串结尾
return 0;
} else if (*S == '\0') { // 如果S指向字符串结尾,T没有指向字符串结尾
return -1;
} else { // 如果T指向字符串结尾,S没有指向字符串结尾
return 1;
}
}
int main() {
char S[] = "hello";
char T[] = "world";
int result = compare(S, T);
cout << result << endl; // 输出:-1
return 0;
}
```
相关问题
运用指针在字符串中插入字符串
在字符串中插入字符串需要进行动态内存分配,可以按照以下步骤进行:
1. 计算插入字符串的长度和原字符串的长度,得到新字符串的长度。
2. 申请新字符串的内存空间,大小为新字符串的长度加上1(用于存储字符串结束符'\0')。
3. 将原字符串的前半部分复制到新字符串中。
4. 将插入字符串复制到新字符串的对应位置。
5. 将原字符串的后半部分复制到新字符串中。
6. 释放原字符串的内存空间。
7. 返回新字符串的指针。
以下是示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* insertString(char* str1, char* str2, int pos) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int newLen = len1 + len2;
char* newStr = (char*)malloc(sizeof(char) * (newLen + 1)); // 加1用于存储字符串结束符'\0'
if (newStr == NULL) {
printf("Error: memory allocation failed.\n");
exit(1);
}
int i;
for (i = 0; i < pos; i++) {
newStr[i] = str1[i];
}
for (i = 0; i < len2; i++) {
newStr[pos + i] = str2[i];
}
for (i = pos; i < len1; i++) {
newStr[i + len2] = str1[i];
}
newStr[newLen] = '\0';
free(str1);
return newStr;
}
int main() {
char str1[] = "Hello, world!";
char str2[] = "beautiful ";
char* newStr = insertString(str1, str2, 7);
printf("%s\n", newStr); // 输出 "Hello, beautiful world!"
free(newStr);
return 0;
}
```
运用指针数组实现字符串的排序
可以使用指针数组来实现字符串的排序,具体步骤如下:
1. 定义一个指针数组,数组中的每个元素都是一个指向字符串的指针。
2. 使用循环读入多个字符串,将每个字符串的地址存储到指针数组中。
3. 使用冒泡排序或快速排序等算法对指针数组进行排序,排序的依据是指向的字符串的大小关系。
4. 输出排序后的字符串。
下面是一个示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_STR_NUM 10
#define MAX_STR_LEN 100
void sort_string(char **str_list, int str_num) {
int i, j;
char *temp;
for (i = 0; i < str_num - 1; i++) {
for (j = 0; j < str_num - 1 - i; j++) {
if (strcmp(str_list[j], str_list[j+1]) > 0) {
temp = str_list[j];
str_list[j] = str_list[j+1];
str_list[j+1] = temp;
}
}
}
}
int main() {
char str_list[MAX_STR_NUM][MAX_STR_LEN];
char *ptr_list[MAX_STR_NUM];
int i, j, str_num;
printf("请输入字符串个数(不超过%d个):", MAX_STR_NUM);
scanf("%d", &str_num);
printf("请输入%d个字符串:\n", str_num);
for (i = 0; i < str_num; i++) {
scanf("%s", str_list[i]);
ptr_list[i] = str_list[i];
}
sort_string(ptr_list, str_num);
printf("排序后的字符串为:\n");
for (i = 0; i < str_num; i++) {
printf("%s\n", ptr_list[i]);
}
return 0;
}
```
在这个示例代码中,使用了一个二维字符数组 `str_list` 存储多个字符串,同时定义了一个指针数组 `ptr_list`,将每个字符串的地址存储到指针数组中。然后使用 `sort_string` 函数对指针数组进行排序,最后输出排序后的字符串。