2极指针 c语言中的char** 和c++ 字符串类 互swap

本文探讨了如何使用二维指针处理字符串数组,包括通过比较找出最大字符串及判断字符串是否首尾相连。提供了具体的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二维数组和二维指针用指针数组来搭桥,二维数组的行表示外层数组,列表示内部数组。二级指针表示行 表示字符串数组,一级指针表示列表示一个字符串。

#include<iostream>
#include<string>
using namespace std;
int max(char ** str, int n)
{
string s[500];
int  t=0;

for (int i = 0; i < n; i++)
//char**转为 string 
//char* 等价于string
{
s[i] = *str;
str++;//二级指针奔行也就是蹦过一个字符串 


}
//string max = s[0];
//string max = "0";
//string max = "";
string max = " ";
for (int i = 0; i < n; i++)
{
if (s[i] > max)
{
//max.assign(s[i]);
max = s[i];
t = i;
}
//cout << s[i]<<endl; //分别输出三个日期字符串


}

return t;
}
int main()
{

char* cstr[]= { "20161224_0923", "20161227_0923", "20161227_1228"};
char** str = cstr;
//printf("%d\n", sizeof(cstr) / 4);
printf("%d\n", max(str, sizeof(cstr)/4));


return 0;


}

上题是时间搓比较大小,把最近的日志时间输出来。







#include<iostream>
#include<string>
using namespace std;


//字符指针 c的思想 方法1
int jl(int num, char** string)
{
for (int i = 0; i<num - 1; i++)
{
if (string[i][strlen(string[i]) - 1] != string[i + 1][0])//简单  第一个i表示第几个字符串 第二个列表示i个字符串中的第几个元素
//  if(string[i][strlen(*(string+i))-1]!=string[i+1][0])
//每个字符串表示每一行 也就是二维数组第一个元素
//    if((*(string+i))[strlen(*(string+i))-1]!=*(string+i+1)[0])  /
//    if(*(*(string+i)+strlen(*(string+i))-1)!=**(string+i+1)) //0k
return 0;
//printf("%c,%c\n",*(*(string+i)+strlen(*(string+i))-1),**(string+i+1));


}


return 1;
}
//字符指针 c++的思想 方法2
int jl2(int num, char** string1)
{
// string s[num];
string s[5000];
//s = string1;//无法从“char **”转换为“std::string [5000]”
//string* p = s;
//p = string1;//无法从“char **”转换为“std::string *”   


for (int i = 0; i<num; i++)
{
s[i] = *string1;   //ar*和string可以互换互转
string1++;
}




for (int i = 0; i<num - 1; i++)
{
if (s[i][s[i].size() - 1] != s[i + 1][0])//简单  第一个i表示第几个字符串 第二个列表示i个字符串中的第几个元素


return 0;
//printf("%c,%c\n",*(*(string+i)+strlen(*(string+i))-1),**(string+i+1));


}


return 1;
}




int main()
{
char* string[] = { "abc", "ce", "efh" };




//    printf("%d\n",jl(sizeof(string)/4,string));
//printf("%d\n", jl(3, string));
printf("%d\n", jl2(3, string));
return 0;

}


上面这个例子是判断字符串是否首尾接龙。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值