二维数组和二维指针用指针数组来搭桥,二维数组的行表示外层数组,列表示内部数组。二级指针表示行 表示字符串数组,一级指针表示列表示一个字符串。
#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;
#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;
}
上面这个例子是判断字符串是否首尾接龙。