题目描述: 计算字符串最后一个单词的长度,单词以空格隔开。
输入描述: 一行字符串,非空,长度小于5000。
输出描述: 整数N,最后一个单词的长度。
示例1: 输入: hello world 输出: 5
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char s[5000];
int count = 0;
int index = 0;
while(scanf("%c", &s[index]) != EOF){
if(s[index] ==' '){
count = 0;
}
else{
count++;
}
index++;
}
printf("%d\n", count - 1);
return 0;
}
题目描述:将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。
输入参数:
inputString:输入的字符串
返回值:
输出转换好的逆序字符串
如:输入“I am a student”,输出“tneduts a ma I”。
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
getline(cin,str);
for(int i = str.size()-1;i>=0;i--)
cout << str[i];
}
题目描述:找出给定字符串中大写字符(即’A’-‘Z’)的个数
接口说明
原型:int CalcCapital(String str);
返回值:int
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
while(cin>>str)
{
int ans=0;
for(int i=0;i<str.size();i++)
{
if(str[i]>='A'&&str[i]<='Z')
ans++;
}
cout<<ans<<endl;
}
return 0;
}
题目描述:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串
输入描述:
输入N个字符
输出描述:
输出该字符串反转后的字符串
#include <stdio.h>
#include <string.h>
// 直接反向输出
int main()
{
char s[1001]="";
while(scanf("%s",s)!=EOF){
int len,i;
len = strlen(s);
for(i=len-1; i>=0; i--){
printf("%c",s[i]);
}
printf("\n");
}
return 0;
}
题目描述:输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
#include <stdio.h>
#include <string.h>
int main(void)
{
int n,m=0;
scanf("%d",&n);
int a[10]={0};
while(n)
{
if(a[n%10] == 0)
{
a[n%10]++;
m = m*10 + n%10;
}
n /= 10;
}
printf("%d\n",m);
return 0;
}
题目描述:一个长度为N的整形数组,数组中每个元素的取值范围是[0, N-1],判断该数组中是否有重复的数;
思路:把每个数放到自己所对应序号的位置上,如果其他位置上有和自己对应序号相同的数,说明有重复的数。
bool IsRepeatNumber(int *arr, int n)
{
if(arr == NULL) return false;
for(int i=0;i<n;i++)
{
while(arr[i] !=i)
{
if(arr[arr[i]] == arr[i])
return true;
int temp = arr[arr[i]];
arr[arr[i]] = arr[i];
arr[i] = temp;
}
}
return false;
}
题目:将两个字符串合并成新的字符串
char* strcat(char* desStr, const char* srcStr)
{
assert(desStr!=NULL&&srcStr!=NULL);
char* address= srcStr;
while(*desStr!='\0')
{
desStr++;
}
while(*desStr++ = *srcStr++);
return address;
}
int main()
{
char arr1[10]="hello ";
char arr2[]="word";
strcat(arr1,arr2);
printf("%s",arr1);
system("pause");
return 0;
}
题目描述:从键盘输入两个有序字符串(其中字符按ASCII码从小到大排序,并且不含重复字符),将两字符串合并,要求合并后的字符串仍是有序的,并且重复字符只出现一次,最后输出合并后的结果
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
int i;
string s1;
string s2;
cin >> s1;
cin >> s2;
// 字符串连接
s1 += s2;
// 储存连接后的字符串长度
const int length = s1.size();
// 对字符串排序
sort(s1.begin(), s1.end());
// 这两行代码可以用下面注释掉的代码代替,但不推荐
// 将C++风格的字符串s1,转换为C风格的字符串,并存入数组t
char t[length];
strcpy(t, s1.c_str());
// 去重,拿到第一个重复数据的下标
int n = unique(t, t + length) - t;
// 将前面不重复的数据输出
for (i = 0; i < n; i++)
cout << t[i];
return 0;
}
题目描述:字符串strlen实现
int strlen(const char *str)
{
assert(str);
const char *end = str;
while(*end++);
return (end-str-1);
}
int main()
{
char str[]="abcdef";
printf("str长度是:%d\n",strlen(str));
system("pause");
return 0;
}
题目描述:在字符串中找出连续最长的数字串,并输出最长串
输入描述:
字符串输出描述:
连续数字串&在所有数字串最长的长度
示例1
输入
abcd12345ed125ss123058789
输出
123058789
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
while (cin >> s) {
int len = 0;
int maxLen = 0;
int pos = -1;
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
len++;
if (maxLen <= len)
{
maxLen = len;
pos = i;
}
}
else
{
len = 0;
}
}
if(maxLen)
cout << s.substr(pos - maxLen + 1, maxLen) << endl;
cout << maxLen << endl;
}
return 0;
}
修改后:
int getLongNumber(string s)
{
int len = 0;
int maxLen = 0;
int pos = -1;
for (int i = 0; i < s.size(); i++)
{
if (s[i] >= '0' && s[i] <= '9')
{
len++;
if (maxLen <= len)
{
maxLen = len;
pos = i;
}
}
else
{
len = 0;
}
}
if(maxLen)
cout << s.substr(pos - maxLen + 1, maxLen) << endl;
cout << maxLen << endl;
return maxLen;
}
题目描述:写出一个程序,接受一个十六进制的数,输出该数值的十进制表示
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
//方法一:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
char str[100];
int i=0,count,sum;
while(gets(str))//用于多次输入
{
count=strlen(str);//计算字符串的长度
sum=0;
for(i=count-1;i>=0;i--)//从十六进制个位开始,每位都转换成十进制
{
if(str[i]>='0'&&str[i]<='9')//数字字符的转换
{
sum+=(str[i]-48)*pow(16,count-i-1);
}
else if(str[i]>='A'&&str[i]<='F')//字母字符的转换
{
sum+=(str[i]-55)*pow(16,count-i-1);
}
}
printf("%d\n",sum);
}
return 0;
}
//方法二:
int hex2dec(string s)
{
int sum=0, num;
for(i=2;i<=s.length()-1;i++)
{
if((s[i]>='a'&&s[i]<='f') || (s[i]>='A'&&s[i]<='F'))
{
num=s[i]-'a'+10;
}
else
{
num=s[i]-'1'+1;
}
int n=s.length()-1-i;
int flag=1;
while(n--)
{
flag=flag*16;
}
sum=sum+flag*num;
}
return sum;
}
题目描述:输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
#include <stdio.h>
int function(int input);
int main(){
int input, result;
scanf("%d",&input);
result = function(input);
printf("%d", result);
return 0;
}
int function(int input){
int count = 0;
while(input){
if(input&1 == 1){
count++;
}
input = input >> 1;
}
return count;
}
题目描述:编写一个算法编写一个算法,将十进制变为二进制后取反,再十进制输出
#include<iostream>
using namespace std;
int main()
{
int n,i,j=0;
int a[1000];
cin>>n;
i=n;
while(i)
{
a[j]=!(i%2);
i/=2;
j++;
}
for(i=j-1;i>=0;i--)
cout<<a[i];
cout << "--> ";
int sum=0, w=1;
for(i=0;i<j;i++)
{
sum += a[i]*w;
w*=2;
}
cout << sum << endl;
return 0;
}