字符串

//字符串  good  look
#include<iostream>
using namespace std;
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string>
int main()
{
 char str[10] = "123456789";
 //char str1[10] = "0123456789";//字符串末尾隐藏0字符所以会越界 error
 printf("%s\n", str);
 /*memset(str, '8', 10);
 str[9] = 0;*/  //2
 memset(str, '8', 9);//1代替2
 printf("%s\n", str);






 int  num = atoi("10a5");//字符串里的整数转为实际整数
 double dnum = atof("4.76a32");


 printf("%d\n", num);
 printf("%lg\n", dnum);
 printf("%g\n", dnum);//保留两位




 char str1[100] ;
 char str2[100];
// string str3;
 //scanf和gets
 scanf("%s\n", str1);//遇到空格、制表符、换行会使得scanf输入结束 不会读取空白符
 printf("%s\n", str1);


 //scanf和gets
 gets(str2);//读入一行,可以读入空格、制表符 直到换行符停止
 //但开始时候不读入空格 忽略空格   gets会忽略到最后换行符
 
 printf("%s\n", str2);
// getline(str3);
}


//结果
123456789
888888888
10
4.76
4.76
abcd
abn  f   f
abcd
abn  f   f

请按任意键继续. . .







#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
int rank = 0, sum = 0;
char* prank = NULL;
char ranks[50] = {};
char temp[10] = {};




do {
printf("请输入一个考试成绩:");
scanf("%d", &rank);
if (rank < 0)
{
break;
}
sprintf(temp, "%d,", rank);
strcat(ranks, temp);




} while (1);
ranks[strlen(ranks) - 1] = 0;
printf("%s\n", ranks);
//rank = 0;
prank = ranks;//字符指针
do
{
rank = atoi(prank);
sum += rank;
prank = strstr(prank, ",");//不能是单引号
if (prank)
{
prank++;
}
else
{
break;
}
} while (1);
printf("总数是%d\n", sum);












}




//
请输入一个考试成绩:1
请输入一个考试成绩:2
请输入一个考试成绩:3
请输入一个考试成绩: - 1
1, 2, 3
总数是6
请按任意键继续. . .







int mysrlen(char* str)
{
int n = 0;
char * pstr = str;

while (*pstr++)
{
n++;
}
return n;
}
char* mystrcat(char* dest, char* src)
{
char* p = dest;
if (!dest)
return src;
else if (!src)
return dest;
while (*p++);
do{
*p++ = *src++;
} while (*src);
return dest;
}








使用指针函数实现文件名和文件目录的拼接。


代码如下所示:
#include <stdio.h>
char* filenamecat(char *path, char* name)
{
char* old = path;
while (*path)
path++;
if (*(path - 1) != '/')
{
*path = '/';
path++;
}
while (*name)
{
*path = *name;
path++;
name++;
}
return path;
}
int main()
{
char path[100] = "/home/tarena/";
char* filename = "字符串函数的使用.c";
filenamecat(path, filename);
printf("带路径的文件名为:%s\n", path);
return0;

}





#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
strcpy(str, "tarena");
printf("字符串为:%s\n", str);
if (strcmp(str, "tarena"))
printf("字符串str与tarena不同\n");
else
printf("字符串str与tarena相同\n");
printf("sizeof(str) = %ld\n", sizeof(str));
printf("strlen(str) = %lu\n", strlen(str));
strcat(str, " C++方向");
printf("字符串拼接后为:%s\n", str);
printf("字符串拆分的前一部分为:%s\n", strtok(str, ""));
printf("字符串拆分的后一部分为:%s\n", strtok(NULL, ""));
char* p = strstr(str, "re");
if (p)
printf("子串re在字符串tarena中的位置为:%ld\n", p - str);
else
printf("子串re不在字符串tarena中\n");
strcpy(str, "a 10 13.5");
int i;
double d;
char c;
sscanf(str, "%c%d%lf\n", &c, &i, &d);
printf("%c %d %lf\n", c, i, d);
memset(str, 0, sizeof(str));
printf("最后字符串:%s\n", str);
sprintf(str, "%c %d %lf\n", c, i, d);//从字符串输到屏幕上
printf("%s\n", str);
return 0;
}
//使用函数strcmp,逐个对比字符串"tarena"与字符数组str中的对应字符。
//如果所有对应字符均相同则返回0,否则返回非0值。
//使用函数strtok将刚拼接好的字符串str重新拆分成"tarena"和" C++方向"。
//字符串为:tarena


//结果
//字符串str与tarena相同
//sizeof(str) = 100
//strlen(str) = 6
//字符串拼接后为:tarena C++方向
//字符串拆分的前一部分为:tarena C++方向
//字符串拆分的后一部分为:(null)
//子串re在字符串tarena中的位置为:2
//a 10 13.500000
//最后字符串:
//a 10 13.500000
//
//请按任意键继续. . .


//字符串和整形的转化

//方法1整形转字符串(  有_  )和字符串转整形        调用函数法

#include<string.h>
#include<stdio.h>
#include<stdlib.h>//atoi(str);  c语言的字符串一般都是调用函数 这种形式:int i=atoi(str);
//c++string 一般都是对象.成员函数形式 str.apped(str1);
int main()
{
char str[] = "1234";
char str1[12];
int i=atoi(str);//字符串转为整型
       _itoa(i,str1,10);//整型转为字符串  其余的形式都不对
//  itoa(i, str, 10);
printf("%s,%d,%s,%c", str, i, str1,str1[0]);

}


方法2:自己写函数

#include<string.h>
#include<stdio.h>
#include<stdlib.h>//atoi(str);  c语言的字符串一般都是调用函数 这种形式:int i=atoi(str);
//c++string 一般都是对象.成员函数形式 str.apped(str1);


int myatoi(char* str)
{
int i=0;
while (*str)
{
//printf("%c\n", *str);
// printf("%d\n", *str);
i = i * 10 +(*str-'0');//*str是字符 1 转为整形的1的asii值 所以字符转为整形 必须减去'0'
//char类型的1和整形1差一个'0'因为char 1对应的整形的字符1的asci码值
str++;
}


return i;
}


char* myitoa(int i)
{
int cout = 0,k=0;
char * str = (char*)malloc(20);
char* pstr = str;//tishen
while (i)
{
*pstr = i % 10+'0' ;
printf("%c\n", *pstr);
i=i / 10;
pstr++;
cout++;
/**str = i % 10 + '0';
printf("%c\n", *str);
i = i / 10;
str++;
cout++;*/ //错误 乱按 str不能动
}
int t ;
//数组倒转
for (int j = 0; j < cout/2; j++)
{   
t = str[j];
str[j] = str[cout - 1 - j];
str[cout - 1 - j] = t;
}
str[cout] = '\0';
return str;



}
int main()
{
char str[] = "1234";
char * p = str;
//printf("%c\n", *str);
char* str1=NULL;
int i = myatoi(p);//字符串转为整型
    //   _itoa(i,str1,10);//整型转为字符串  其余的形式都不对
//  itoa(i, str, 10);
str1= myitoa(i);
printf("%s,%d,%s,%c\n", str, i, str1,str1[0]);




}






#include<stdio.h>
char* mystrcoy(char* dest,char* src)
{
char * pdest = dest;
while (*src)
{
*pdest++ = *src++;
}
*pdest = '\0';
return  dest;


}


int main()
{
char str[12] = "123";
mystrcoy(str,"123456");
printf("%s", str);
}



#include<stdio.h>
#include<string.h>
char* mystrcoy(char* dest,char* src)
{
char * pdest = dest;
while (*src)
{
*dest++ = *src++;
}
*dest = '\0';
return  pdest; //只要指针指的内存不释放则这样也行这个直接复制到计算机临时存储区中


}


int main()
{
char str[12] = "123";
mystrcoy(str,"123456");
printf("%s\n", str);
printf("%d\n", strlen(mystrcoy(str, "123456")));

}

http://www.cnblogs.com/processakai/archive/2011/06/24/2089348.html 字符串转整数



判断是否符合字母结论:

string和char**的转换 二维数组和二级指针(基于指针数组)的等价形式

#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;//char*和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", "de", "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、付费专栏及课程。

余额充值