C++ 字符串数组的问题
最近遇到字符串数组的问题,一直没能解决,大概是这样的如何定义字符串数组?如何往字符串数组中添加新的字符串?如何判断新增的字符串是否重复?chartmp[100][]={'...
最近遇到字符串数组的问题,一直没能解决,大概是这样的
如何定义字符串数组?如何往字符串数组中添加新的字符串?如何判断新增的字符串是否重复?
char tmp[100][]={'127.0.0.1',"192.168.1.1","172.16.1.1"};
1.问题来了,编译的时候提示 size of the type 'char[]' is unknown or zero
后来修改为
char tmp[100][16]={'127.0.0.1',"192.168.1.1","172.16.1.1"}; //16的意思呢是255.255.255.255 再加'\0'的长度
printf(tmp[0][]); //编译时提示错误 Expression syntax
1.问题又来了,如何打印出来?其中一组呢? 怎样才能正确打印出来 127.0.0.1 或 192.168.1.1 呢?
2.如何往这个数组里面添加更多的IP地址呢?
3.假设新增加的IP是已经重复,如何判断IP是否重复呢?
上面'127.0.0.1'写错了,应该是双引号的
char tmp[100][16]={"127.0.0.1","192.168.1.1","172.16.1.1"}; 展开
如何定义字符串数组?如何往字符串数组中添加新的字符串?如何判断新增的字符串是否重复?
char tmp[100][]={'127.0.0.1',"192.168.1.1","172.16.1.1"};
1.问题来了,编译的时候提示 size of the type 'char[]' is unknown or zero
后来修改为
char tmp[100][16]={'127.0.0.1',"192.168.1.1","172.16.1.1"}; //16的意思呢是255.255.255.255 再加'\0'的长度
printf(tmp[0][]); //编译时提示错误 Expression syntax
1.问题又来了,如何打印出来?其中一组呢? 怎样才能正确打印出来 127.0.0.1 或 192.168.1.1 呢?
2.如何往这个数组里面添加更多的IP地址呢?
3.假设新增加的IP是已经重复,如何判断IP是否重复呢?
上面'127.0.0.1'写错了,应该是双引号的
char tmp[100][16]={"127.0.0.1","192.168.1.1","172.16.1.1"}; 展开
展开全部
#include<iostream>
using namespace std;
#include <stdio.h>
main(){
char tmp[100][16]={"127.0.0.1","192.168.1.1","172.16.1.1"}; // 初始
int i,k,n=3;
int flag;
char yesno[5];
// 1 how to output: 如何输出
for (i=0;i<n;i++) cout << tmp[i] << endl;
while(1)
{
// 2:add 1: 如何加1个
cout << "input new ip, for example 192.168.1.2 " << endl;
cin >> tmp[n];
// 3: 判断有无重复,重复则 n 不变,不重复 则 n=n+1
flag=0;
for (i=0;i<n;i++) if (strcmp(tmp[i],tmp[n])==0) {flag=1; k=i; break;};
if (flag == 0) { n++; cout << "added" << endl;}
else { cout << "the ip is the same as tmp[" << k << "]" << endl;};
// 4: 是否 再加 新的
cout << "\nDo you want to add more? Y or N" << endl;
cin >> yesno;
if (yesno[0]!='Y' && yesno[0]!='y') break;
};
cout << "\n==================" << endl;
// 打印 所有 地址
for (i=0;i<n;i++) cout << tmp[i] << endl;
return 0;
}
using namespace std;
#include <stdio.h>
main(){
char tmp[100][16]={"127.0.0.1","192.168.1.1","172.16.1.1"}; // 初始
int i,k,n=3;
int flag;
char yesno[5];
// 1 how to output: 如何输出
for (i=0;i<n;i++) cout << tmp[i] << endl;
while(1)
{
// 2:add 1: 如何加1个
cout << "input new ip, for example 192.168.1.2 " << endl;
cin >> tmp[n];
// 3: 判断有无重复,重复则 n 不变,不重复 则 n=n+1
flag=0;
for (i=0;i<n;i++) if (strcmp(tmp[i],tmp[n])==0) {flag=1; k=i; break;};
if (flag == 0) { n++; cout << "added" << endl;}
else { cout << "the ip is the same as tmp[" << k << "]" << endl;};
// 4: 是否 再加 新的
cout << "\nDo you want to add more? Y or N" << endl;
cin >> yesno;
if (yesno[0]!='Y' && yesno[0]!='y') break;
};
cout << "\n==================" << endl;
// 打印 所有 地址
for (i=0;i<n;i++) cout << tmp[i] << endl;
return 0;
}
更多追问追答
追问
如果把tmp换成int的类型呢
int tmp[N][8]={{12345},{23456},{34567}};
1.int的话如何添加数组?判断是否重复呢?
2.如何获得有字符串数组的长度呢?
3.初始化是否可以写成int tmp[][]; 或 char tmp[][];//因为最初的时候肯定是没有任何字符串的
4.如何删除数组中的某一项?比如127.0.0.1 不用了,如何删除?
追答
超出原来的问题范围了。简单答复如下:
用1维数组:int tmp[N]; 就可以了。
int tmp[N]={12345,23456,34567}; int n=3;
// 2:add 1: 如何加1个
cout > tmp[n];
// 3: 判断有无重复,重复则 n 不变,不重复 则 n=n+1
flag=0;
for (i=0;i<n;i++) if (tmp[i]==tmp[n]) {flag=1; k=i; break;};
if (flag == 0) { n++; cout << "added" << endl;}
else { cout << "the int is the same as tmp[" << k << "]" << endl;};
----
字符串数组的长度呢? 这是 int , 不是字符串,int 数组的长度 n.
---
初始化是否可以写成int tmp[][]; -- 不可以。因为没有给大小,也不能计算大小。
如果 1维用 int *tmp, 2 维用 int **tmp, 你可以用 动态分配 realloc, 随时增加单元。
----
何删除数组中的某一项?比如127.0.0.1 --
答: int 型 只能是整数,例如 127。不允许是 127.0.0.1
删除数组中的某一项,从 i=0; 到 i<n 找到tmp[i]==目标值,这项为 k=i,
如果 k==n-1, 则 n=n-1; 否则 { tmp[k]=tmp[n-1]; n=n-1。}
如果不想打乱队列,{for (j=k+1;j<n;j++) tmp[j-1]=tmp[j]; n=n-1;}
2013-11-19
展开全部
#include <iostream>
#include <stdio.h>
#include <string.h>
#define N 100
using namespace std;
int main()
{
char tmp[N][16]={{"127.0.0.1"},{"192.168.1.1"},{"172.16.1.1"}};//添加括号
cout << tmp[0]<< endl;//打印
strcpy(tmp[3],"255.255.255.255");//添加
printf("%s\n",tmp[3]);//打印
for(int i = 0; i<N; i++)
{
if(strlen(tmp[3])==0)
continue;
if(strcmp(tmp[i],"172.16.1.1")==0)
cout<<i<<endl;//返回所在位置
}
return 0;
}
#include <stdio.h>
#include <string.h>
#define N 100
using namespace std;
int main()
{
char tmp[N][16]={{"127.0.0.1"},{"192.168.1.1"},{"172.16.1.1"}};//添加括号
cout << tmp[0]<< endl;//打印
strcpy(tmp[3],"255.255.255.255");//添加
printf("%s\n",tmp[3]);//打印
for(int i = 0; i<N; i++)
{
if(strlen(tmp[3])==0)
continue;
if(strcmp(tmp[i],"172.16.1.1")==0)
cout<<i<<endl;//返回所在位置
}
return 0;
}
追问
如果把tmp换成int的类型呢
int tmp[N][8]={{12345},{23456},{34567}};
1.int的话如何添加数组?判断是否重复呢?
2.如何获得有字符串数组的长度呢?
3.初始化是否可以写成int tmp[][]; 或 char tmp[][];//因为最初的时候肯定是没有任何字符串的
4.如何删除数组中的某一项?比如127.0.0.1 不用了,如何删除?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char tmp[100][16]的意思不应该是16个100字符长的数组么?
追问
不是的,char tmp[100][16] //100数组大小,16单个数组的字符串长度
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询